将varchar转换为日期 - SQL Server

时间:2012-12-06 07:01:40

标签: sql datetime varchar

我在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)
))

此查询为我提供了所有记录,与日期范围之间的记录无关。 任何帮助,将不胜感激。感谢

1 个答案:

答案 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日期间需要StartDateEndDate的记录,则可以执行此操作(假设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)