mysql - Mysql在日期类型varchar中选择唯一值
问题描述
我有一列,其中日期类型为 varchar。例如:
15-10-2018
16-10-2018
19-10-2018
23-10-2018
29-10-2018
8-11-2018
9-11-2018
10-11-2018
12-11-2018
当我咨询以下查询时
SELECT DISTINCT date FROM `test` WHERE date BETWEEN '15-10-2018' and '9-11-2018'.
我有正确的结果。
15-10-2018
16-10-2018
19-10-2018
23-10-2018
29-10-2018
8-11-2018
9-11-2018
但如果查询是:
SELECT DISTINCT date FROM `test` WHERE date BETWEEN '15-10-2018' and '10-11-2018'.
或者
SELECT DISTINCT date FROM `test` WHERE date BETWEEN '15-10-2018' and '12-11-2018'.
我得到的答案是空的。
我认为它只是验证 sql 中的日期。
我需要找到正确的日期。
解决方案
我认为问题在于该列是 varchar,因此它比较的是字符而不是日期范围。我会建议将列转换为日期类型,然后再试一次。
或者,如果您无法更改列的类型,则可以将其转换为日期格式,如下所示:
SELECT DISTINCT `date` FROM `test` WHERE STR_TO_DATE(`date`,'%d-%m-%Y') BETWEEN '2018-10-15' AND '2018-11-10';
我用你的数据进行了测试,它有效。当然,这可能会在数据库上付出一些额外的努力,并且不会使用索引。