问候堆满花,
我正在尝试覆盖现有列中的数据,并在已设置的情况下执行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);
可以在此问题上提供任何帮助。
答案 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
来表示无法解析的日期字符串。
请注意,我使用的正则表达式不是万无一失的,并且不能完全验证您的日期字符串。但是它至少应该清除掉确实不可用的字符串数据。