我在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)
))
此查询为我提供了所有记录,与日期范围之间的记录无关。 任何帮助,将不胜感激。感谢
答案 0 :(得分:1)
首先 - 如果必须使用YYYYMMDD
格式,请不要在varchar列中存储日期值。
第二 - 你可以比较日期:
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日期间需要StartDate
和EndDate
的记录,则可以执行此操作(假设StartDate
&lt; ; = 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)