以下是我的 sql 查询,请告诉我为什么它返回 null
Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
以下是我的 sql 查询,请告诉我为什么它返回 null
Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
服务器扫描 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 值,而不是您所做的字符串文字 - 以获得与默认输出不同的输出。
如果你想从字符串转换为日期
Select STR_TO_DATE ('11-APR-74','%d-%b-%y')
像 :: 一样使用它
Select STR_TO_DATE ('11-APR-74','%e-%b-%Y')
因为'%e%b%Y'
format 不对应于'11-APR-74'
字符串值(如STR_TO_DATE
函数所期望的那样),并且因为'11-APR-74'
value 是 type CHAR
,但不是DATETIME
(如DATE_FORMAT
函数所期望的那样)。
如果要重新格式化由CHAR
值表示的日期,请将其从原始格式转换为DATETIME
first,然后将其转换为所需格式的字符串:
SELECT DATE_FORMAT(STR_TO_DATE('11-APR-74','%e-%b-%Y'),'%e%b%Y');
顺便说一句,你可以用一个普通的字符串来去掉破折号:
SELECT REPLACE('11-APR-74','-','');