gpt4 book ai didi

sql - postgresql - 更新,在 case 语句中设置 DEFAULT

转载 作者:行者123 更新时间:2023-11-29 11:44:46 25 4
gpt4 key购买 nike

尝试更新表以在 case 语句中使用 DEFAULT 关键字值时出现语法错误,如下所示:

UPDATE tbl
SET status =
CASE
WHEN ( st.status = '' ) THEN ( DEFAULT )
ELSE ( ROUND( CAST(st.status as numeric) ) )
END

FROM sourceTable st

这里是错误:

ERROR:  syntax error at or near "DEFAULT"
LINE 4: ... WHEN ( tc.status = '''' ) THEN ( DEFAULT )

现在看了一会儿文档,我看不出这违反了任何语句构造规则。

前面的代码使用 NULL 确实有效

UPDATE tbl
SET status =
CASE
WHEN ( st.status = '' ) THEN ( NULL )
ELSE ( ROUND( CAST(st.status as numeric) ) )
END

FROM sourceTable st

我的目标是将该列更新为默认值,或者如果源表列中有空字符串则更新为 NULL。

使用 NULL 效果很好,但当然将列更新为 NULL,我认为更改为 DEFAULT 会起作用 - 任何人都可以帮助进行语法更正或替代方法吗?

这 block 代码是由在不同场景中处理各种列的东西生成的,所以不寻找任何替代方法来解决这个问题(尽管我对任何回应持开放态度) - 只是在可能的情况下寻找修复,或者解释为什么语法不起作用。谢谢!

最佳答案

PostgreSQL documentation for UPDATE syntax似乎是说您可以将列设置为表达式或裸词 DEFAULT,但不能设置为包含关键字 DEFAULT 的表达式。

SET column_name = { expression | DEFAULT }

此语法引用意味着 = 的右侧可以是表达式,也可以是 DEFAULT{ X | 的符号Y 表示“X 或 Y,恰好选择一个。”

使用DEFAULT关键字的选择没有出现在documentation for value expressions中. DEFAULT 可以用作 INSERTUPDATE 中的特殊情况赋值,但只能作为值表达式的替代,而不是作为更复杂的表达。

要解决这个问题,您可能必须从 information_schema.columns.column_default 中读取相应表和列的列的默认值,然后在 UPDATE 语句中按字面意义使用该值.

关于sql - postgresql - 更新,在 case 语句中设置 DEFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41902885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com