SQL Server:在字符串数据类型中的日期之间搜索
我有一个表,它将日期存储为typeSQL Server:在字符串数据类型中的日期之间搜索,sql,sql-server,Sql,Sql Server,我有一个表,它将日期存储为typevarchar 在SELECT语句中,我想提取表中的所有值,但过滤两个日期之间的数据 我尝试过转换,这是我得到的最接近的转换。任何帮助都将不胜感激。我要筛选的日期称为“打开” SELECT * FROM table WHERE Opened BETWEEN CONVERT(DATETIME, '01/08/2006', 103) AND CONVERT(DATETIME, '01/05/2020', 103) 我不鼓励您
varchar
在SELECT
语句中,我想提取表中的所有值,但过滤两个日期之间的数据
我尝试过转换,这是我得到的最接近的转换。任何帮助都将不胜感激。我要筛选的日期称为“打开”
SELECT *
FROM table
WHERE Opened BETWEEN CONVERT(DATETIME, '01/08/2006', 103)
AND CONVERT(DATETIME, '01/05/2020', 103)
我不鼓励您在日期之间使用。这是一个很好的解释,由亚伦·伯特兰提供
select t.*
from table t
where t.opened >= '2016-08-01' and
t.opened < '2020-05-02'
但是,您应该修复表,以便使用正确的类型而不是字符串存储日期。根据语法,我删除了mysql标记。请仅使用您真正使用的数据库进行标记。您的查询有什么问题?为什么会有人将日期存储在varchar列中?日期存储的格式是什么?您能举个例子吗?如果您必须将日期存储到varchar列中(这是一个非常糟糕的主意),那么至少要使用一种与区域无关的格式。阅读如果这是表中使用的格式,则不适合范围查询。您需要在“”和“”之间转换(DATETIME,Opened,…),也就是说,转换列,而不是要比较的值。当然,这会有糟糕的性能,但这就是将日期存储为文本的结果。
select t.*
from table t
where convert(date, t.opened, 103) >= '2016-08-01' and
convert(date, t.opened, 103) < '2020-05-02'