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

mysql中INSERT INTO SELECT CURRENT_DATE()的错误1292(22007),mysql,sql,Mysql,Sql,我试图使用sql查询使表MASTER\u表中的行的每日计数早于表OLD\u计数中的特定日期:- 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'; OLD\u COUNT具有列COUNT作为bigint(20)和Date作为Date

我试图使用sql查询使表
MASTER\u表中的行的每日计数早于表
OLD\u计数中的特定日期:-

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';
OLD\u COUNT
具有列
COUNT
作为
bigint(20)
Date
作为
Date

MASTER_表
有一列
UPDATE_DATE
varchar(30)
(相关数据示例为
2015-11-12 19:20:15:850
)。不幸的是,我无法更改表定义或强制任何程序以任何预定义格式输入数据。因此,我必须处理我能找到的任何相关数据。
我使用的是5.6.26 MySQL

谁能解释一下为什么
INSERT
查询在
SELECT
工作时失败,或者我的查询出了什么问题

------更新----
请原谅我

(相关数据示例为2015-11-12 19:20:15:850)。不幸的是,我无法更改表定义或强制任何程序以任何预定义格式输入数据。因此,我必须处理我能找到的任何相关数据

没有正确传达我的禁忌

<>我只需要考虑数据,可以自动转换为<代码>时间戳< /代码>。
Wed Nov 10 19:25:27 PST 2015
1447934215
(我无法控制的其他格式)等数据不相关,但存在
UPDATE\u DATE<'2015-11-12 15:36:20'
或其任何派生词按字典顺序而不是按时间顺序对它们进行比较(因为
更新时间
varchar(30)
)。现在,它在我的试验台上可以正常工作,但在生产数据上(如
10-11-2015 7:25:27 PM
)可能会出现。

你能试试吗

WHERE UPDATE_DATE < '2015-11-12 15:36:20'
有关子字符串的选项,您可以查看

编辑2:

要获得类似格式的数据,可以尝试

STR_TO_DATE(UPDATE_DATE, '%Y-%m-%d') 
(根据需要选择最佳格式)然后应用如下子字符串:

Substring(STR_TO_DATE(UPDATE_DATE, '%Y-%m-%d'), position, length)
你能试试吗

WHERE UPDATE_DATE < '2015-11-12 15:36:20'
有关子字符串的选项,您可以查看

编辑2:

要获得类似格式的数据,可以尝试

STR_TO_DATE(UPDATE_DATE, '%Y-%m-%d') 
(根据需要选择最佳格式)然后应用如下子字符串:

Substring(STR_TO_DATE(UPDATE_DATE, '%Y-%m-%d'), position, length)

SELECT
INSERT
语句之间的行为差异在于MySQL默认启用了
STRICT\u TRANS\u TABLES
sql模式。
SELECT
语句执行时会出现警告(例如
截断了错误的日期时间值:“2015-11-12 19:20:15:850”
)。
当相同的
SELECT
语句包含在
INSERT
语句中时,在
Strict SQL模式下,这些警告被视为错误,数据插入被中止

如果严格模式无效,MySQL将插入无效或缺失值的调整值,并生成警告(请参阅第13.7.5.41节“显示警告语法”)。在严格模式下,您可以通过使用INSERT IGNORE或UPDATE IGNORE生成此行为

对于SELECT等不更改数据的语句,无效值将在严格模式下生成警告,而不是错误

使用
插入忽略
解决问题。还可以使用
SET SESSION sql\u mode=''


可以找到专门针对MySQL 5.6版的文档,但更好的阅读方式可能是
SELECT
INSERT
之间的行为差异,MySQL上默认启用了
STRICT\u TRANS\u TABLES
sql模式。
SELECT
语句执行时会出现警告(例如
截断了错误的日期时间值:“2015-11-12 19:20:15:850”
)。
当相同的
SELECT
语句包含在
INSERT
语句中时,在
Strict SQL模式下,这些警告被视为错误,数据插入被中止

如果严格模式无效,MySQL将插入无效或缺失值的调整值,并生成警告(请参阅第13.7.5.41节“显示警告语法”)。在严格模式下,您可以通过使用INSERT IGNORE或UPDATE IGNORE生成此行为

对于SELECT等不更改数据的语句,无效值将在严格模式下生成警告,而不是错误

使用
插入忽略
解决问题。还可以使用
SET SESSION sql\u mode=''


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

您在旧计数表上有可能导致错误的触发器吗?@Adish,没有,我们没有配置触发器您在旧计数表上有可能导致错误的触发器吗?@Adish,不,如果数据格式被特别限制为
%Y-%m-%d%T
,我们尚未配置触发器。但是这里表有(不相关的)数据,例如<代码>星期五19:25:27 PST 2015 < /代码>,我不需要考虑。我试过了,上面的代码仍然是失败的。代码>11月10日19:25:27 PST 2015 < /代码>,我真正想要的就是我的
insert
select
@parthasarathy你试过了吗?@genepos我试过
mysql>插入到test_db.OLD_COUNT选择COUNT(*),test_db.MASTER_表中的CURRENT_DATE(),其中有时间戳(子字符串(更新日期从1到19))<'2015-11-12 15:36:20'
给了我
错误1292(22007):日期时间值不正确:“Wed Nov 10 19:25:27”
@parthasarathy
子字符串(“Wed Nov 10 19:25:27 PST 2015”从1到19)
返回“Wed Nov 10 19:25:27”。您确定它是您所需要的吗?如果数据格式被特别限制为
%Y-%m-%d%T
,则该选项将起作用。但是这里表有(不相关的)数据,例如<代码>星期五19:25:27 PST 2015 < /代码>,我不需要考虑。我试过了,上面的代码仍然是失败的。代码> 11月10日19:25:27 PST 2015 < /代码>,我真正想要的是: