MySQL delete语句报表截断了不正确的日期时间值

MySQL delete语句报表截断了不正确的日期时间值,mysql,Mysql,这句话很管用: SELECT * FROM table_name WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY); “日期事件”字段的数据类型为字符(27) 使用下一个SQL语句测试DATE()函数效果良好: SELECT DATE('2018-01-10T13:22:28.000000Z'); “2018-01-10” 下面是完整的SQL代码: CREATE TABLE `table_name` ( `id` int(

这句话很管用:

SELECT * FROM table_name
WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY);
“日期事件”字段的数据类型为字符(27)

使用下一个SQL语句测试DATE()函数效果良好:

SELECT DATE('2018-01-10T13:22:28.000000Z');
“2018-01-10”

下面是完整的SQL代码:

CREATE TABLE `table_name` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_event` char(27) NOT NULL COMMENT 'YYYY-MM-DDThh:mm:ss.ffffffZ',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Test';

INSERT INTO table_name
(date_event) VALUES ('2018-01-10T13:22:28.000000Z');

SELECT * FROM table_name
WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY);

DELETE FROM table_name
WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY);
CREATE TABLE`TABLE\u name`(
`id`int(10)无符号非空自动增量,
`日期\事件'char(27)NOT NULL COMMENT'YYYY-MM-DDThh:MM:ss.ffffffff z',
主键(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1默认字符集=utf8 COMMENT='Test';
插入到表\u名称中
(日期事件)值('2018-01-10T13:22:28.000000Z');
从表名称中选择*
其中日期(日期事件)<日期(现在()-间隔90天);
从表\u名称中删除
其中日期(日期事件)<日期(现在()-间隔90天);

date\u事件
字段为
Char
(字符串类型)。我们需要使用以下函数将其转换为格式:

'2018-01-10T13:22:28.000000Z'
基本上可以用格式说明符编写为:
'%Y-%m-%dT%T.%fZ'

因此,您的
Delete
查询应该如下():

其他详细信息:

  • %Y
    年为数字、4位值
  • %m
    月份名称作为数值(00到12)
  • %d
    以数字值表示的月份日期(01到31)
  • %T
    24小时格式的时间(hh:mm:ss)
  • %f
    微秒(000000到999999)

格式说明符的完整列表可以在以下位置看到:

提供一个SQLFIDLE()或db FIDLE(),其中包含示例数据,您可以使用MySQL
STR_TO_DATE(STR,fmt)
函数“What is the problem?”重现问题。您需要将日期事件列从
CHAR(27)转换为
到本机MySQL数据类型
datetime(6)
它支持什么
YYYY-MM-DD HH:MM:SS[.france]
MySQL 5.6支持的格式+究竟为什么使用CHAR(27)作为数据类型来存储日期?出于历史原因,使用CHAR(27)。WHERE子句有效,DELETE语句可以在不进行检查的情况下删除该行。使用datetime(6)可以很好地工作,但许多表必须在编译过程中转换和存储。
SELECT DATE('2018-01-10T13:22:28.000000Z');
CREATE TABLE `table_name` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_event` char(27) NOT NULL COMMENT 'YYYY-MM-DDThh:mm:ss.ffffffZ',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Test';

INSERT INTO table_name
(date_event) VALUES ('2018-01-10T13:22:28.000000Z');

SELECT * FROM table_name
WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY);

DELETE FROM table_name
WHERE DATE(date_event) < DATE(NOW() - INTERVAL 90 DAY);
DELETE FROM table_name
WHERE STR_TO_DATE(date_event, '%Y-%m-%dT%T.%fZ') < DATE(NOW() - INTERVAL 90 DAY);
SELECT * FROM table_name
WHERE STR_TO_DATE(date_event, '%Y-%m-%dT%T.%fZ') < DATE(NOW() - INTERVAL 90 DAY);