更新语句语法 (PostgreSQL-Redshift)

Posted

技术标签:

【中文标题】更新语句语法 (PostgreSQL-Redshift)【英文标题】:Update statement Syntax (PostgreSQL-Redshift) 【发布时间】:2018-01-09 05:37:21 【问题描述】:

在时间维度中,我们添加了额外的两列,分别称为 Fiscal Year 和 Fiscal Year Month,它们将被填充。在我们的案例中,会计年度从 9 月 1 日至 8 月 31 日结束。(例如 - 2017 年 9 月 1 日至 2018 年 8 月 31 日为 2018 财年)。我正在尝试在 PostgreSQL 中编写更新语句。 (逻辑 - 当 X.monthname 在 ('September','October','November','December') 然后 (X.Year+1) else X.Year end) - 但看起来我无法得到正确的语法。你能帮忙建造吗?

我们的 Time 表中有 Date、Year、MonthName 列,可用于更新语句。

谢谢。

【问题讨论】:

不要将日期存储在单独的组件中(月、年等)。相反,只需将您的日期存储在单个日期/日期时间列中。继续当前的设计只会在以后引起问题。 你能提供你正在使用的确切语法和你得到的错误吗? UPDATE testtable SET fiscalyear = CASE WHEN month IN ('September','October','November','December') THEN year+1 ELSE year END 应该可以工作,尽管蒂姆有合理的担忧。 sqlfiddle 但是我们需要在日期字段上放置一个连接条件吗?我尝试执行上述但收到错误(单查询多行) 嘿,谢谢它成功了...我能够更新会计年度。现在我想更新财政年度月份。上述更新语句有效。 是哪一个? Redshift 还是 Postgres?这两个是完全不同的 【参考方案1】:

我认为update 看起来像:

update x
    set Year = Year + 1
    where x.monthname in ('September', 'October', 'November', 'December') ;

【讨论】:

以上是关于更新语句语法 (PostgreSQL-Redshift)的主要内容,如果未能解决你的问题,请参考以下文章

SQL 更新语句的语法错误

更新语句上的 MySQL 语法错误

更新语句中的 VB.NET 语法错误

SQL UPDATE 语句:更新表中的记录语法及案例剖析

访问中的 SQL 更新语句的语法错误

更新语句中@po 附近的语法不正确