0

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

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

4 回答 4

2

MySQL STR_TO_DATE 函数

服务器扫描 str 试图匹配它的格式。...扫描从 str 的开头开始,如果发现格式不匹配,则扫描失败。

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

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

MySQL 日期和时间类型

尽管 MySQL 尝试以多种格式解释值,但日期部分必须始终按年-月-日顺序(例如,'98-09-04')给出,而不是按月-日-年或日-月-其他地方常用的年份顺序(例如,'09-04-98'、'04-09-98')。

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

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

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

于 2012-12-13T08:31:33.800 回答
1

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

Select STR_TO_DATE ('11-APR-74','%d-%b-%y')
于 2012-12-13T08:14:41.437 回答
0

像 :: 一样使用它

Select STR_TO_DATE ('11-APR-74','%e-%b-%Y')
于 2012-12-13T08:17:20.350 回答
0

因为'%e%b%Y'format 不对应于'11-APR-74'字符串值(如STR_TO_DATE函数所期望的那样),并且因为'11-APR-74'value 是 type CHAR,但不是DATETIME(如DATE_FORMAT函数所期望的那样)。

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

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

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

SELECT REPLACE('11-APR-74','-','');
于 2012-12-13T08:40:59.647 回答