postgresql-更新,在case语句中设置默认值

postgresql-更新,在case语句中设置默认值,sql,postgresql,Sql,Postgresql,尝试在case语句中使用默认关键字值更新表时,出现语法错误,如下所示: 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 "DEFAUL

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

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,但使用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
,但不能设置为包含关键字
DEFAULT
的表达式

SET column_name = { expression | DEFAULT }
此语法引用意味着
=
的右侧可以是表达式,也可以是
默认值
{X | Y}
的符号表示“要么X,要么Y,选择一个。”

使用
DEFAULT
关键字的选择不会出现在中<代码>默认值可以用作
插入
更新
中的特例赋值,但只能作为值表达式的替代,不能作为更复杂表达式的一部分


要解决这个问题,您可能必须从
信息\u schema.columns.column\u DEFAULT
中读取相应表和列的列的默认值,然后在UPDATE语句中逐字使用该值。

该列的默认值是什么?只需在
中指定它,然后(默认值)
如果它有
默认值,那么
状态
如何获取空值?代码中的其他地方似乎有些奇怪。空字符串处于源表状态。或者只是
update tbl set status=round(cast(status as numeric)),其中状态为“”;更新tbl set status=默认值,其中status=''@Abelisto,Nooo!所有SQL操作必须在一条语句中完成!(我开玩笑)谢谢你,比尔-我明白你的意思,相信你的话-并将你的答案标记为正确-但我不明白引用文档中的定义在语法上如何阻止关键字DEFAULT成为左侧表达式的一部分,我也无法找到关于DEFAULT关键字的更多详细信息(至少在我今天的搜索中)。我会用另一种方法,你的或者类似阿贝利斯托的评论来让它工作——请随意给我指一些你可以澄清的东西,无论如何,再次感谢。