mysql 如何解决此问题1292截断不正确的日期值

pftdvrlh  于 2023-04-19  发布在  Mysql
关注(0)|答案(1)|浏览(140)

我需要你的帮助。我正在尝试转换一个文本字段(包含:'2017-11-16 14:06:49')到日期字段。我得到警告:1292截断错误的日期值:'2017-11-16 14:06:49'(.我也尝试了STR_TO_DATE语句.我已经输入SET @@SESSION.sql_mode ='ALLOW_INVALID_DATES'以避免一些配置错误,但错误仍然存在.这是我的查询:

SET @t = (
        SELECT COUNT(ac.id) 
        FROM table1 ac 
        WHERE STR_TO_DATE(ac.created_on, '%Y-%m-%d') 
            BETWEEN (DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 1 MONTH) 
            AND LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
        AND ac.date = DATE(LAST_DAY(CURDATE() - INTERVAL 1 MONTH))
    );
tnkciper

tnkciper1#

你应该先将VARCHAR列改为DATETIME:

ALTER TABLE `table1` MODIFY COLUMN `created_on` DATETIME DEFAULT NULL;

它将使用更少的空间,更重要的是,处理速度更快。
如果你的created_on varchar列包含一个有效的DATETIME值,那么你可以只使用DATE(ac.created_on),但这将使你的查询non-SARGable
相反,您应该用途:

SET @t = (
        SELECT COUNT(ac.id) 
        FROM table1 ac 
        WHERE ac.created_on >= CURRENT_DATE - INTERVAL 1 MONTH
        AND ac.created_on < LAST_DAY(CURRENT_DATE - INTERVAL 1 MONTH) + INTERVAL 1 DAY
        AND ac.date = LAST_DAY(CURRENT_DATE - INTERVAL 1 MONTH)
    );

如果按created_on进行常规查询,则应该在列上有一个索引。

相关问题