首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL STR_TO_DATE以"0“(零)结尾

问MySQL STR_TO_DATE以"0“(零)结尾
EN

Stack Overflow用户
提问于 2014-10-07 15:35:29
回答 2查看 487关注 0票数 0

SELECT STR_TO_DATE('1.1.2000 0:00:00','%e.%c.%Y')将会像2000-01-01一样结束

但是,当我尝试对值为1.1.2000 0:00:00的列执行相同的操作时,请运行以下命令

代码语言:javascript
复制
SELECT 
FirstDisplayedDate,
FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')
FROM product

我将得到零(不是NULL!)在每一排。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 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的结果,例如:

代码语言:javascript
复制
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'

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

代码语言:javascript
复制
SELECT 
  FirstDisplayedDate,
  STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS Converted
FROM product

Here和here提供了有关如何正确使用该函数的详细信息。

票数 0
EN

Stack Overflow用户

发布于 2014-10-07 15:52:20

您将得到您所写的内容:FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')将FirstDisplayedDate与STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')进行比较,如果它们不相等,则返回零。我认为你想在这里使用别名,所以:

代码语言:javascript
复制
SELECT 
  FirstDisplayedDate,
  STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS FirstDisplayedDate2
FROM product
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26230840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档