我有两个问题,使用以下查询:
为什么查询为period2返回NULL?
select distinct
STR_TO_DATE(period, '%Y-%m-%d') as period1,
STR_TO_DATE(period, '%Y%m%d') as period2
from table
答案 0 :(得分:1)
获取NULL
的原因在于STR_TO_DATE
:
如果从str中提取的日期,时间或日期时间值是非法的, STR_TO_DATE()返回NULL并产生警告。服务器扫描 str试图匹配格式。
鉴于定义,很明显输入相同的period
- 字符串不能匹配两种不同的格式;因此,两个STR_TO_DATE
- 来电中的一个会给出无效日期,即NULL
。
但是,我认为period
实际上是DATE
(或DATETIME
)数据类型,您的意思是DATE_FORMAT
,而不是STR_TO_DATE
,对吧?假设这样,以下查询应该起作用:
select DATE_FORMAT(period, '%Y-%m-%d') as period1,DATE_FORMAT(period, '%Y%m%d') as period2 from test
使用此方案时......
create table test (
period date
);
insert into test (period) values ("2016-12-01");
它产生以下结果:
period1 | period2
2016-12-01 | 20161201