SQL更新(case)多个值

SQL更新(case)多个值,sql,Sql,我需要根据不同列的值更新它们: UPDATE tablename set date1 = case when mytime < '01.08.2020' then mytime end, set date2 = case when mytime < '01.08.2020' then mytime end where something = 1; 更新表名 set date1=大小写 当mytime

我需要根据不同列的值更新它们:

UPDATE tablename

set date1 = case
    when mytime < '01.08.2020' then mytime
end,
set date2 = case
    when mytime < '01.08.2020' then mytime
end

where something = 1;
更新表名
set date1=大小写
当mytime<'01.08.2020'时,则mytime
完,,
set date2=大小写
当mytime<'01.08.2020'时,则mytime
结束
其中某物=1;

在第二个集合块中,我得到一个错误,即列(date2)无效。

您不需要对多个列多次设置

UPDATE tablename set 
    date1 = case when mytime < '01.08.2020' then mytime end, 
    date2 = case when mytime < '01.08.2020' then mytime end
where something = 1;
更新表名集
date1=当mytime<'01.08.2020'时,则mytime结束,
date2=当mytime<'01.08.2020'时,则mytime结束
其中某物=1;

set
仅在
更新中发生一次。对于某些数据库(如SQLite3),您必须使用YYYY-MM-DD格式的日期才能进行准确的排序和比较。@tonypdmtr在几乎所有情况下,最好使用日期文字
date'2020-11-10'
,或者不处理相同数据的文化表示(因为在一天内有人可以更改默认行为或设置)@astentx我就是这么说的。但是格式必须是YYYY-MM-DD@tonypdmtr这是不一样的。在甲骨文中。例如,在格式
yyyy-mm-dd
中,是确切的单词
date
,后跟日期。因此,仅格式化文本有时不起作用:
SQL>alter session set nls_date_format='dd.mm.yyyy';会议改变了。SQL>从双3中选择*2,其中当前_日期<'2020-12-31';如果当前_日期<'2020-12-31'*第3行出现错误:ORA-01861:literal与格式字符串不匹配
请注意,在大多数数据库中,您使用的日期文字(以及OP)都是假的,除非日期存储为文本,并且在这种情况下,无法正确排序。你应该对此发表评论。