您好,我有一个 sql 更新,需要日期类型的 nullif。当我第一次使用 null 语句提交它而不使用 null 语句进行更新时,它很好并且通过,但第二次总是出现错误。
UPDATE del_data.cncpt_rqst
SET prpsd_prodn_dt=#{cncptDt}
WHERE cncpt_rqst_id=#{cu.cncptRqstId}
但是,对于 nullif,NULLIF(#{cncptDt},'')
它说 '' 是文本类型而不是日期。我尝试通过"::d ate强制转换",输入空,以便(#{cncptDt},null)
并强制转换该空,但都无济于事。我对这个问题猛烈抨击我的头,任何帮助都会很棒
您应该强制转换表达式到日期:
UPDATE del_data.cncpt_rqst
SET prpsd_prodn_dt = nullif(#{cncptDt}, '')::date
由于不可能
做''::date
,你应该将第一个投射到文本中:
postgres=# select nullif('2016-01-01'::date::text, '');
nullif
------------
2016-01-01
(1 row)
之后您可以将其转换为 ::d ate - 日期的 null 和文本表示对于此类转换都有效。