当一天有" 0"时,MySQL STR_TO_DATE似乎失败了。

时间:2018-02-28 13:01:54

标签: mysql sql database string date

我的数据库中有一系列日期为String格式的日期。

我正在尝试使用以下命令将这些转换为日期:

SELECT STR_TO_DATE(Date_Scanned, '%d/%m/%Y')FROM urls WHERE Date_Scanned 
BETWEEN "01/02/2018" AND "05/04/2018"

当日期包含0时,我的问题似乎发生了,例如下面的命令会返回所有需要的日期:

SELECT STR_TO_DATE(Date_Scanned, '%d/%m/%Y')FROM urls WHERE Date_Scanned 
BETWEEN "01/02/2018" AND "15/04/2018"

但是,此命令返回零结果:

SELECT STR_TO_DATE(Date_Scanned, '%d/%m/%Y')FROM urls WHERE Date_Scanned 
BETWEEN "01/02/2018" AND "05/04/2018"

1 个答案:

答案 0 :(得分:3)

我相信您的代码中没有错误,而是返回空行。原因是因为您传递的参数被评估为字符串而不是日期。您的WHERE子句会过滤字符串中的Date_Scanned列。

如果您想根据真实的日期数据类型过滤列,则应该使用STR_TO_DATE()子句中的WHERE而不是SELECT子句。

SELECT STR_TO_DATE(Date_Scanned, '%d/%m/%Y')
FROM urls 
WHERE STR_TO_DATE(Date_Scanned, '%d/%m/%Y') BETWEEN '2018-02-01' AND '2018-04-05'

但是,根据您的评论,您希望坚持所需的格式,因此您必须投射列以及值。 但为什么要让它更复杂?

WHERE STR_TO_DATE(Date_Scanned, '%d/%m/%Y') 
      BETWEEN STR_TO_DATE('01/02/2018', '%d/%m/%Y') 
              AND STR_TO_DATE('05/04/2018', '%d/%m/%Y')