我的数据库中有一系列日期是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"
我相信你的代码中没有错误,而是返回空行。原因是因为您传递的参数被评估为字符串而不是日期。你的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')
但是,根据您的评论,您希望坚持所需的格式,因此您必须投射列以及值。但为什么要让它更复杂?
qazxswpoi