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我将得到零(不是NULL!)在每一排。
我做错了什么?
发布于 2014-10-07 15:43:56
STR_TO_DATE()函数是DATE_FORMAT()函数的逆。它接受一个字符串str和一个格式字符串格式。
如果格式字符串同时包含DATETIME日期和时间部分,则STR_TO_DATE()返回值;如果字符串仅包含日期或时间部分,则返回DATE或TIME值。
如果从str 提取的日期、时间或日期时间值是非法的,则STR_TO_DATE()返回NULL并生成警告。
服务器会扫描str ,尝试使用将格式与其匹配。格式字符串可以包含原义字符和以%开头的格式说明符。格式的文字字符必须与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-07 15:52:20
您将得到您所写的内容:FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')将FirstDisplayedDate与STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')进行比较,如果它们不相等,则返回零。我认为你想在这里使用别名,所以:
SELECT
FirstDisplayedDate,
STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS FirstDisplayedDate2
FROM producthttps://stackoverflow.com/questions/26230840
复制相似问题