我想问一下Mysql(日期)
我有一组数据,其日期使用数据类型 varchar
所以我想更新真实表,但在真实表中,数据类型是日期
当我想更新时,它会显示像这样的错误 
Error Code: 1292
  Incorrect date value: ‘1975-11-31’ for column ‘dob’ at row 1
我意识到日期无效…
那么我应该如何只获得有效日期?
请帮帮我..
这是我的查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 | 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 | 
 - 示例输出是什么?
- 输出是仅在日历上有效的日期 示例 1996-06-01 有效 1977 -11-31 无效原始数据 否 |日期 1 | 1996-01-06 2 | 1977-11-31 预期结果否 |日期 1 | 1996-01-06
不要像你一样单独检查日期的所有部分(你不会工作,因为它仍然允许 11 月 31 日或 2 月 30 日作为日期),只需检查 MySQL 是否认为它是有效的通过 DATE 传递日期并检查非 NULL 结果。所以替换
| 12
 3
 4
 5
 | 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 | 
 
与
- 嗨@jazz 你能给我一些关于什么不起作用的更多信息吗?
- 
哦,当我删除条件并像我一样添加 STR_TO_DATE 函数时,我得到 0 行数据。
- 
@jazz 似乎 STR_TO_DATE 在所有情况下都无法按预期工作。试试我编辑的版本
  
 
dob_new类型是mysql的日期吗?如果是,为什么不使用 dob_new between ‘2018-01-01’ and ‘2018-12-31’
- 
好的,您可以尝试只执行 SELECT old_id FROM set_of_data     WHERE status_color = 0     AND dob_new IS NOT NULL    AND age != ‘#VALUE!’ AND STR_TO_DATE(dob_new, ‘%Y-%m-%d’) IS NOT NULL 的 sql 并查看结果。
- 
我得到了数据,但它仍然有一个无效的日期,比如 1975-11-31
- 
SELECT old_id FROM set_of_data WHERE status_color = 0 AND dob_new IS NOT NULL AND age != ‘#VALUE!’ AND STR_TO_DATE(dob_new, ‘%Y-%m-%d’) BETWEEN ‘2018-01-01’ AND ‘2018-12-31’
- 
仍然得到无效的日期..对不起
  
 
 
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/271011.html