我需要你的帮助。我正在尝试转换一个文本字段(包含:'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))
);
1条答案
按热度按时间tnkciper1#
你应该先将VARCHAR列改为DATETIME:
它将使用更少的空间,更重要的是,处理速度更快。
如果你的
created_on
varchar列包含一个有效的DATETIME值,那么你可以只使用DATE(ac.created_on)
,但这将使你的查询non-SARGable。相反,您应该用途:
如果按
created_on
进行常规查询,则应该在列上有一个索引。