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

时间:2018-11-12 23:01:51

标签: mysql

我有一列日期是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中的日期。

我需要确定正确的日期。

2 个答案:

答案 0 :(得分:1)

我认为问题在于该列是varchar,因此它在比较字符而不是日期范围。我建议将列转换为日期类型,然后重试。

或者,如果您无法更改列的类型,则可以将其转换为以下日期格式:

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

我对您的数据进行了测试,它可以正常工作。当然,这可能会使数据库付出更多的努力,并且不会使用索引。

答案 1 :(得分:1)

您需要将数据类型设置为date并更新日期以使用date以获得更可靠的结果。完成后,您应该使用WHERE子句中日期的数据库格式。

尝试

SELECT DISTINCT date FROM测试WHERE date BETWEEN '2018-10-15' and '2018-11-10'