我想问一下Mysql(日期)
我有一组数据,这些数据的日期使用数据类型varchar 所以我想更新真实表,但是在真实表中数据类型是日期 当我要更新时,它显示这样的错误
错误代码:1292 日期值不正确:第1行“ dob”列的日期为“ 1975-11-31”
我意识到日期无效... 那么我应该怎么只获得有效日期呢?
请帮助我。
这是我的查询
UPDATE ori_table a
INNER JOIN set_of_data dd ON dd.old_id = a.id
SET a.dob = dd.dob_new
WHERE a.id IN (SELECT old_id FROM set_of_data
WHERE status_color = 0
AND dob_new IS NOT NULL
AND age != '#VALUE!'
AND SUBSTRING(dob_new ,6,2) <= 12
AND SUBSTRING(dob_new ,6,2) >= 01
AND SUBSTRING(dob_new ,1,4) <= 2018
AND SUBSTRING(dob_new ,9,2) <= 31
AND SUBSTRING(dob_new ,9,2) >= 01)
AND a.dob IS NULL
答案 0 :(得分:1)
与其检查每个日期的各个部分(以及您将无法使用的日期,因为它仍然允许11月31日或2月30日作为日期),而是检查MySQL是否认为它是有效的。通过DATE
传递日期并检查结果是否为非NULL。所以替换
AND SUBSTRING(dob_new ,6,2) <= 12
AND SUBSTRING(dob_new ,6,2) >= 01
AND SUBSTRING(dob_new ,1,4) <= 2018
AND SUBSTRING(dob_new ,9,2) <= 31
AND SUBSTRING(dob_new ,9,2) >= 01
使用
AND DATE(dob_new) IS NOT NULL
答案 1 :(得分:0)
MySQL的dob_new
类型日期吗?如果是,为什么不使用dob_new between '2018-01-01' and '2018-12-31'