1

我在 SQL Server 2005 中对 StartDate 和 EndDate 字段使用 varchar 数据类型。示例查询如下所示:

*我遵循 dd/MM/yyyy 日期格式。

select * from dbo.SubDetails
where
((
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,StartDate,105)), 0) <= 
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,'16/11/2012',105)), 0)
)
AND 
(
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,EndDate,105)), 0) >= 
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,'11/9/2012',105)), 0)
))

这个查询给了我所有的记录,不管日期范围之间的记录。任何帮助,将不胜感激。谢谢

4

1 回答 1

1

首先 - 如果必须 - 不要将日期值存储在 varchar 列中 - 使用YYYYMMDD格式。第二 - 您可以比较日期:

select *
from dbo.SubDetails
where
    convert(datetime, StartDate, 105) <= convert(datetime,'16/11/2012', 105) and
    convert(datetime, EndDate, 105) >= convert(datetime,'11/9/2012', 105)

此外,您的查询将返回与给定数据范围相交的所有数据范围(2012 年 9 月 11 日 - 2012 年 11 月 16 日)。那是你想做的吗?

更新:如果您需要 2012 年 11 月 9 日至 2012 年 11 月 16 日之间的记录StartDateEndDate您可以这样做(假设StartDate<= EndDate):

select *
from dbo.SubDetails
where
    convert(datetime, StartDate, 105) >= convert(datetime,'09/11/2012', 105) and
    convert(datetime, EndDate, 105) <= convert(datetime,'16/11/2012', 105)
于 2012-12-06T07:11:01.993 回答