为什么我从这个查询中得到null

时间:2012-12-13 08:12:33

标签: mysql

以下是我的sql查询请告诉我为什么它返回null

Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')

4 个答案:

答案 0 :(得分:2)

来自MySQL STR_TO_DATE function

  

服务器扫描str尝试匹配格式。 ...扫描   从str的开头开始,如果找不到格式则失败   匹配。

这就是您的第一个查询失败的原因:11-APR-74看起来不像%e%b%Y,因此无法解析日期。你应该改为

SELECT STR_TO_DATE ('11-APR-74','%e-%b-%Y')

来自MySQL Date and Time types

  

虽然MySQL试图解释几种格式的值,但是日期   零件必须始终以年 - 月 - 日的顺序给出(例如,   '98 -09-04'),而不是在月 - 日 - 年或日 - 月 - 年   其他地方常用的订单(例如,'09 -04-98','04 -09-98')。

这就是你的第二个查询失败的原因:74不是一个月的有效日期,你应该这样做

SELECT DATE_FORMAT ('74-APR-11','%e%b%Y')

请注意,DATE_FORMAT通常用于DB值,而不是字符串文字 - 用于获得与默认值不同的输出。

答案 1 :(得分:1)

如果您想从字符串转换为日期

Select STR_TO_DATE ('11-APR-74','%d-%b-%y')

答案 2 :(得分:0)

像::

一样使用它
Select STR_TO_DATE ('11-APR-74','%e-%b-%Y')

答案 3 :(得分:0)

由于'%e%b%Y'格式与'11-APR-74'字符串值不对应(因为STR_TO_DATE函数需要),并且因为'11-APR-74'值的类型为CHAR,但是不是DATETIME(因为DATE_FORMAT函数预期)。

如果要重新格式化由CHAR值表示的日期,请先将其原始格式转换为DATETIME,然后将其转换为所需格式的字符串:

SELECT DATE_FORMAT(STR_TO_DATE('11-APR-74','%e-%b-%Y'),'%e%b%Y');

顺便说一句,你可以用一个普通的字符串遮挡去除破折号:

SELECT REPLACE('11-APR-74','-','');