我有一列将日期存储为text
,我需要选择日期小于今天日期的所有条目。
如果我使用这个:
SELECT *
FROM mytab
WHERE expire < CURRENT_DATE( )
ORDER BY expire DESC
它不会选择正确的条目,而只会选择da_expire
空的条目。
我该如何解决?
我有一列将日期存储为text
,我需要选择日期小于今天日期的所有条目。
如果我使用这个:
SELECT *
FROM mytab
WHERE expire < CURRENT_DATE( )
ORDER BY expire DESC
它不会选择正确的条目,而只会选择da_expire
空的条目。
我该如何解决?
首先,您为什么将其存储为字符串?
您需要使用 MySQL 的内置函数将其转换为日期,以便能够将其与今天的日期进行比较。
WHERE STR_TO_DATE(expire, '%Y/%m/%d %H:%i') < CURDATE()
这会慢一点,因为如果您在列上定义了一个索引,它将不会使用任何索引。
在查询中使用 STR_TO_DATE(expire, '%m/%d/%Y') 而不是 expire。我假设您以月日年格式存储日期。您需要根据字符串格式调整格式。但是,出于性能原因,在加载/插入过程中转换过期类型。