使用STR_TO_DATE时,查询返回NULL

时间:2017-01-02 16:32:48

标签: php mysql sql datetime

我有两个问题,使用以下查询:

  1. 此查询用于选择列表目的。我想将period1显示为文本而将period2显示为选项值。这是一个好习惯吗?用户可以利用选择列表的任何漏洞吗?
  2. 为什么查询为period2返回NULL?

    select distinct 
           STR_TO_DATE(period, '%Y-%m-%d') as period1,
           STR_TO_DATE(period, '%Y%m%d') as period2 
    from table
    

1 个答案:

答案 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