Cor*_*Dee 13 mysql sql null sql-update
我有一个更新语句,更新字段x,y和z,其中id = xx.
在表格中,我有一些不同的x_created_datetime字段(对于不同人员维护/输入的记录的不同部分).我想编写一个单独的查询,如果为null,将更新此字段,但如果不为null则不管它.
所以我拥有的是:
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp"
WHERE id = X
Run Code Online (Sandbox Code Playgroud)
我需要的是一种添加以下内容的方法,但仍然总是更新以上内容:
scan_created_date = "current_unix_timestamp"
where scan_created_date is null
Run Code Online (Sandbox Code Playgroud)
我希望我能在没有第二笔交易的情况下做到这一点.有关如何实现这一目标的任何想法?
cjk*_*cjk 33
做这个:
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp",
scan_created_date = COALESCE(scan_created_date, "current_unix_timestamp")
WHERE id = X
Run Code Online (Sandbox Code Playgroud)
该COALESCE函数选择第一个非空值.在这种情况下,它会将日期戳scan_created_date更新为相同的值(如果存在),否则它将取代您替换的任何内容"current_unix_timestamp".
mySQL 有一个IFNULL函数,所以你可以这样做:
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp"
scan_created_date = IFNULL( scan_created_date, "current_unix_timestamp" )
WHERE id = X
Run Code Online (Sandbox Code Playgroud)
我认为您正在寻找的是IF()
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp",
scan_created_date = IF(scan_created_date IS NOT NULL, "current_unix_timestamp", NULL)
WHERE id = X
Run Code Online (Sandbox Code Playgroud)