mysql在日期类型varchar中选择唯一值

eagi6jfj  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(246)

我有一个日期类型为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中的日期。
我要找个合适的日期。

xzabzqsa

xzabzqsa1#

您需要将数据类型设置为date,并将日期更新为使用date以获得更可靠的结果。一旦完成,您应该使用数据库格式的日期在您的 WHERE 条款。
尝试 SELECT DISTINCT date FROM 测试 WHERE date BETWEEN '2018-10-15' and '2018-11-10'

hrysbysz

hrysbysz2#

我认为问题在于这个列是varchar,所以它比较的是字符而不是日期范围。我建议将列转换为日期类型,然后重试。
或者,如果无法更改列的类型,可以将其转换为如下日期格式:

SELECT DISTINCT `date` FROM `test` WHERE STR_TO_DATE(`date`,'%d-%m-%Y') BETWEEN '2018-10-15' AND '2018-11-10';

我用你的数据做了测试,结果很有效。当然,这会给数据库增加一些额外的工作量,并且不会使用索引。

相关问题