SQL Server:在字符串数据类型中的日期之间搜索

SQL 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) 我不鼓励您

我有一个表,它将日期存储为type
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'