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
我将在每一行中得到零(非空!)。
我究竟做错了什么?:(
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
我将在每一行中得到零(非空!)。
我究竟做错了什么?:(
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
你得到你写的: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