MySQL STR_TO_DATE结束为“0”(零)

时间:2014-10-07 07:35:29

标签: mysql zero str-to-date

SELECT STR_TO_DATE('1.1.2000 0:00:00','%e.%c.%Y')最终会像2000-01-01

一样

但是当我尝试通过运行

在值为1.1.2000 0:00:00的列上执行相同操作时
SELECT 
FirstDisplayedDate,
FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')
FROM product

我会在每一行得到零(非空!)。

我做错了什么? :(

2 个答案:

答案 0 :(得分:0)

STR_TO_DATE()函数是DATE_FORMAT()函数的反向。它采用字符串str和格式字符串格式。

如果格式字符串包含两个日期和时间部分,或者STR_TO_DATE()DATETIME值,则

DATE会返回TIME值字符串包含日期或时间部分。

如果从str 中提取的日期,时间或日期时间值非法,则STR_TO_DATE()会返回NULL并发出警告。

服务器扫描str 尝试以匹配格式。格式字符串可以包含以%开头的文字字符和格式说明符。 格式的文字字符必须str中按字面匹配。格式的格式说明符必须str中的日期或时间部分匹配。

并且,获得零的原因是未指定的日期或时间部分的值为0 ,因此str 中未完全指定的值会产生一些或全部的结果部件设置为0 ,例如:

mysql> SELECT STR_TO_DATE('abc','abc');
            -> '0000-00-00'
mysql> SELECT STR_TO_DATE('9','%m');
        -> '0000-09-00'
mysql> SELECT STR_TO_DATE('9','%s');
        -> '00:00:09'

检查您的查询用于日期/时间匹配的格式,并确保您的数据库行包含字符串,可以将其转换为日期,并且不将函数的输出值分配给相同的数据库字段:

SELECT 
  FirstDisplayedDate,
  STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS Converted
FROM product

Herehere是有关如何正确使用该功能的更多信息。

答案 1 :(得分:0)

您收到的内容为:FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')FirstDisplayedDateSTR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')进行比较,如果不相等则返回零。我想你想在这里使用别名:

SELECT 
  FirstDisplayedDate,
  STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS FirstDisplayedDate2
FROM product