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
我会在每一行得到零(非空!)。
我做错了什么? :(
答案 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
答案 1 :(得分:0)
您收到的内容为: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 product