0

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

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

我究竟做错了什么?:(

4

2 回答 2

0

STR_TO_DATE()函数是函数的反函数DATE_FORMAT()。它需要一个字符串str和一个格式字符串格式。

STR_TO_DATE()DATETIME如果格式字符串同时包含日期和时间部分,则返回一个值如果字符串DATE包含日期或时间部分,则返回一个或TIME值。

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

服务器扫描str 试图匹配它的格式。格式字符串可以包含文字字符和以 . 开头的格式说明符%。format 中的文字字符必须str. format 中的格式说明符必须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

这里这里是更多关于如何正确使用该功能的信息。

于 2014-10-07T07:43:55.713 回答
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
于 2014-10-07T07:52:19.830 回答