如何将两日期字段合并为l.date_Combined?求UPDATE语句逻辑
解决日期字段合并的UPDATE语句问题
嘿,这事儿其实很简单,咱们可以用SQL里的COALESCE()函数来实现你的需求——它会返回传入参数里第一个非空的值,完美匹配你“优先用l.date_time_ic,空的话用l.date_time_mc”的要求。
完整的UPDATE语句
直接把你的WHERE条件整合进去,语句应该是这样的:
UPDATE new.customers l SET l.date_Combined = COALESCE(l.date_time_ic, l.date_time_mc) WHERE ((l.date_time_ic BETWEEN '4/1/2018' AND '4/30/2018') OR (l.date_time_mc BETWEEN '4/1/2018' AND '4/30/2018' AND l.date_time_ic IS NULL));
为什么这么写?
COALESCE(l.date_time_ic, l.date_time_mc):如果date_time_ic不为空,就取它的值;如果它是空的,就自动用date_time_mc的值,完全符合你的优先级要求。- 你的WHERE子句原封不动保留,确保只更新那些符合日期范围条件的记录,不会误操作其他数据。
备选方案(如果你的数据库不支持COALESCE)
有些小众数据库可能不支持COALESCE,这时候可以用CASE语句来实现同样的逻辑:
UPDATE new.customers l SET l.date_Combined = CASE WHEN l.date_time_ic IS NOT NULL THEN l.date_time_ic ELSE l.date_time_mc END WHERE ((l.date_time_ic BETWEEN '4/1/2018' AND '4/30/2018') OR (l.date_time_mc BETWEEN '4/1/2018' AND '4/30/2018' AND l.date_time_ic IS NULL));
小提示
执行UPDATE之前,建议先跑一遍你原来的SELECT语句确认一下要更新的记录范围,确保没有问题再执行更新操作,避免误改数据~
内容的提问来源于stack exchange,提问作者Matthew Mahgrefteh
相关产品推荐
相关产品推荐

