我想问一下Mysql(日期)
我有一组数据,其日期使用数据类型 varchar
所以我想更新真实表,但在真实表中,数据类型是日期
当我想更新时,它会显示像这样的错误
Error Code: 1292
Incorrect date value: ‘1975-11-31’ for column ‘dob’ at row 1
我意识到日期无效…
那么我应该如何只获得有效日期?
请帮帮我..
这是我的查询
1 2 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 结果。所以替换
1 2 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/271011.html