当我尝试使用以下更新查询时...
UPDATE
product_table
SET
product_name = $1,
price = $2,
delivery_interval = NULLIF ($3, '')
WHERE
id = $4;
。出现以下...
error: column "delivery_interval" is of type integer but expression is of type text
delivery_interval = NULL
而不是NULLIF ($3, '')
似乎有效。为什么?
据我所知,你需要这个:
delivery_interval = (NULLIF($3::text, '')::integer)
首先,您需要将参数强制转换为文本,以便 NULLIF 将 like 与 like 进行比较,然后将整个表达式转换为整数,以匹配列类型。
从文档中:
结果与第一个参数的类型相同 — 但有一个 微妙。实际返回的是 隐含
=
运算符,在某些情况下将被提升 以匹配第二个参数的类型。例如,NULLIF(1, 2.2)
产生numeric
,因为没有integer = numeric
运算符, 只有numeric = numeric
.
因此,要么你的$3
是text
的,要么是因为隐含的=
nullif()
原因而被隐式地投射到text
。这使得nullif()
的结果成为text
.
您可以尝试显式转换nullif()
的结果。
...
nullif($3, '')::integer
...
如果是 Postgres 那么你必须使用 NULL 对于整数数据类型
更新table_name设置状态 = "成功",列 2 = 空,其中条件<>