比较字符串日期(DD-MM-YYYY)与当前日期进度



我的日期以字符串格式存储。我想获取小于今天日期的数据。

我尝试了SELECT * FROM table WHERE upto_date < to_char(NOW(), 'DD-MM-YYYY'),但它没有返回正确的数据。

SELECT * 
FROM table 
WHERE TO_DATE(upto_date,'DD-MM-YYYY') < current_date

使用文本存储日期是错误的:

  • 不能按它排序,因为文本是按字母顺序排序的,02-01-2000在01-02-2000之后

  • 没有排序关系,不能索引,不能按范围搜索

  • 01-02是1月2日还是2月1日取决于你问谁

  • 没有验证,69-74-9453是正确的文本

所以,如果可能的话,应用程序应该使用正确的类型。如果工作量太大,可以创建一个设置为TO_DATE(upto_date,'DD-MM-YYYY')的GENERATED列,它将自动以正确的格式保存和更新日期,并与文本日期一起键入。这样你就可以索引它并优化你的查询。

最新更新