繁体   English   中英

截断不正确的日期值

[英]Truncated incorrect date value

在我的情况下,我需要处理无效的日期值,例如:'04070$'。 即使我收到诸如“04070$”之类的错误输入,我也需要插入一些内容。

当我做:

select str_to_date('04070$','%m%d%Y') from dual;

结果是:

2000-04-07

但是对于插入语句,我收到一个错误:

INSERT INTO `table1` ( `Date_Posted`) VALUES (str_to_date('04070$','%m%d%Y'))

#1292 - Truncated incorrect date value: '04070$'

我不明白为什么 select 语句运行良好而 insert 语句出错。 当出现这种不正确的值时,有没有办法让插入语句插入 NULL 或日期(即使它不正确)?

发生这种情况是因为 MySQL 在Strict Mode上运行。

SELECT语句中, STR_TO_DATE()将返回一年,但由于它没有 100% 匹配,它也会发出警告:

mysql> SELECT str_to_date('040710$','%m%d%y');
+---------------------------------+
| str_to_date('040710$','%m%d%y') |
+---------------------------------+
| 2010-04-07                      |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)

如您所见,警告只是对选择结果的一点提及,但它仍然存在:

mysql> show warnings;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect date value: '040710$' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

在严格模式下,尝试INSERT / UPDATE时,任何警告都会变成错误。 这就是为什么您可以在选择时看到日期但无法将其保存在数据库中的原因。

虽然你的问题是有效的。 但请记住,这是警告而不是错误。

在这种情况下也会插入行。 我用一个例子交叉检查了它,它工作正常。

由于 MySQL 总是在与适当的数据类型匹配后截断列值,并从完整字符串中截断不匹配的数据或超出范围的值。

示例:如果要在 char(3) 中插入 'ABCDEFGHIHJHJ',它会截断字符串并在行中插入 ABC。

将年份格式更改为大写。

str_to_date('01-01-2000','%d-%m-%Y')

Select 语句和 Insert 语句将给出错误,因为 $ 不会被视为数字。 它一定要是

INSERT INTO `table1` ( `Date_Posted`) VALUES (str_to_date('040709','%m%d%Y')).

用于插入表 1 的条目 2009-04-07

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM