我的数据库中有一系列日期为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"
答案 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')