gpt4 book ai didi

mysql - mysql 中的错误 1292 (22007) 用于 INSERT INTO SELECT CURRENT_DATE()

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:25 26 4
gpt4 key购买 nike

我正在尝试保留表 MASTER_TABLE 中的每日行数早于表中的特定日期 OLD_COUNT使用 sql 查询:-

INSERT INTO test_db.OLD_COUNT(Count, Date) SELECT COUNT(*),  CURRENT_DATE() FROM test_db.MASTER_TABLE WHERE TIMESTAMP(UPDATE_DATE) < '2015-11-12 15:36:20';

执行这个,给我一个错误ERROR 1292 (22007): Truncated incorrect datetime value: '2015-11-12 19:20:15:850'

我的问题是插入查询失败 WHERE TIMESTAMP(UPDATE_DATE)

正在执行 SELECT COUNT(*), CURRENT_DATE() FROM test_db.MASTER_TABLE WHERE TIMESTAMP(UPDATE_DATE) < '2015-11-12 15:36:20';给我预期的输出

+----------+----------------+
| COUNT(*) | CURRENT_DATE() |
+----------+----------------+
| 0 | 2015-11-18 |
+----------+----------------+
1 row in set, 11 warnings (0.04 sec)

OLD_COUNT有列 Count作为bigint(20)Date作为date .
MASTER_TABLE有专栏 UPDATE_DATE作为varchar(30) (相关数据示例为 2015-11-12 19:20:15:850)。 不幸的是,我无法更改表定义或强制任何程序以任何预定义格式输入数据。因此,我必须凑合使用我能找到的任何相关数据
我使用的是 5.6.26 MySQL

谁能解释一下为什么 INSERT SELECT 时查询失败有效或我的查询有什么问题?

--------更新--------
对不起,如果

( example of relevant data is 2015-11-12 19:20:15:850 ). Unfortunately I cant change the table definition or force any program to enter data in any pre-defined format. Hence I have to make-do with any relevant data I can find

没有正确传达我的限制条件。

我只需要考虑可以转换为 TIMESTAMP 的数据自动按照this . Wed Nov 10 19:25:27 PST 2015等数据或 1447934215 (我无法控制的其他格式)不相关但存在
UPDATE_DATE < '2015-11-12 15:36:20'或相同的任何衍生物按字典顺序而不是按时间顺序比较它们(因为 UPDATE TIMEvarchar(30) )。它现在在我的测试台上运行良好,但可能存在生产数据(例如 10-11-2015 7:25:27 PM)。

最佳答案

SELECTINSERT 语句之间的行为差​​异源于 MySQL 默认启用 STRICT_TRANS_TABLES sql 模式。
SELECT 语句执行但带有警告(例如 Truncated incorrect datetime value: '2015-11-12 19:20:15:850' )。
当相同的 SELECT 语句被合并到 INSERT 语句中时,在 Strict SQL Mode 中,这些警告被视为错误并且数据插入被中止。

If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings (see Section 13.7.5.41, “SHOW WARNINGS Syntax”). In strict mode, you can produce this behaviour by using INSERT IGNORE or UPDATE IGNORE.

For statements such as SELECT that do not change data, invalid values generate a warning in strict mode, not an error.

使用 INSERT IGNORE 解决问题。也可以使用 SET SESSION sql_mode = '';

可以找到专门针对 MySQL 5.6 版的文档 here , 但更好的阅读可能是 this

关于mysql - mysql 中的错误 1292 (22007) 用于 INSERT INTO SELECT CURRENT_DATE(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com