如何在输入为空的情况下将整数列中的值设置为 NULL



当我尝试使用以下更新查询时...

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.

因此,要么你的$3text的,要么是因为隐含的=nullif()原因而被隐式地投射到text。这使得nullif()的结果成为text.

您可以尝试显式转换nullif()的结果。

...
nullif($3, '')::integer
...

如果是 Postgres 那么你必须使用 NULL 对于整数数据类型

更新table_name设置状态 = "成功",列 2 = 空,其中条件<>

最新更新