以下是我的sql查询请告诉我为什么它返回null
Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
答案 0 :(得分:2)
服务器扫描str尝试匹配格式。 ...扫描 从str的开头开始,如果找不到格式则失败 匹配。
这就是您的第一个查询失败的原因:11-APR-74看起来不像%e%b%Y,因此无法解析日期。你应该改为
SELECT STR_TO_DATE ('11-APR-74','%e-%b-%Y')
虽然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','-','');