【发布时间】:2021-12-24 14:41:00
【问题描述】:
我对现有数据库有疑问。
我有一个数据库结构,其中“日期列”位于 VARCHAR(10) 中,我想对此应用日期过滤器,但由于日期保存为字符串,因此它不是正常工作。 由于某些系统限制,我无法更改数据库的结构或其中的日期格式,它必须保持原样。
立柱结构如下
`Date` varchar(10) DEFAULT NULL
日期格式(字符串)类似于 --> '10/22/2020'
我试过的查询如下,但没有用。
SELECT *
FROM `documents2` WHERE documents2.Date >= '11/15/2019' AND documents2.Date <= '11/15/2021'
如果有人能告诉我一种可以在字符串上应用日期过滤器的方法,我将不胜感激。
【问题讨论】:
-
Edit 问题并标记您正在使用的 DBMS。
-
您必须使用 DBMS 的转换功能来即时创建真实日期。
-
存储在 VARCHAR 中的日期并不是数据完整性的最佳选择。请参阅此答案:stackoverflow.com/a/30569396/8328420 它可以解决您的问题,还可以告诉您如何修复列的类型以完全避免这种情况。
-
将日期存储为字符串(不是日期,只是字符串)对于您可能希望执行的任何过滤标准的性能都非常不利;要执行任何日期比较,数据库引擎必须首先将字符串值转换为正确的日期,因此它必须对每一行 first 执行此操作 - 这就是所谓的 unsargable并且任何这样做的查询都会强制引擎扫描整个表/索引。
-
从不,将日期值存储在
varchar列中。这是一个非常糟糕的主意。
标签: sql