MySQL-STR_TO_DATE的IF查询

时间:2019-01-08 16:30:05

标签: mysql if-statement

问候堆满花,

我正在尝试覆盖现有列中的数据,并在已设置的情况下执行STR_TO_DATE。

这是代码:

SELECT IF(columnA = '../../..' , '0000/00/00' , STR_TO_DATE(columnA, '%m/%d/%Y) 
FROM tablename
WHERE extract_date = '2018-12-31';

实际上,我必须使用此逻辑对表进行更新。我尝试了这个:

UPDATE tablename
IF columnA = '../../..' THEN
SET columnA = '0000-00-00' ELSE
SET columnA = STR_TO_DATE(columnA,'%m/%d/%Y);

可以在此问题上提供任何帮助。

1 个答案:

答案 0 :(得分:0)

MySQL的REGEXP运算符在这里很方便:

UPDATE tablename
SET date_col = CASE WHEN columnA REGEXP '[0-9]{2}/[0-9]{2}/[0-9]{4}'
                    THEN STR_TO_DATE(columnA, '%m/%d/%Y)
                    ELSE NULL END;

columnA从字符串更新为日期没有意义,因为类型不匹配。更好的策略是创建一个新列来存储日期。另外,我建议使用NULL而不是0000-00-00来表示无法解析的日期字符串。

请注意,我使用的正则表达式不是万无一失的,并且不能完全验证您的日期字符串。但是它至少应该清除掉确实不可用的字符串数据。