我在DB中有两列:StartDate
(日期时间列)和StartTime
(nvarchar列)。
StartDate
包含事件开始时的日期。
StartTime
包含事件应该开始的时间。它是24小时格式(例如,22:00或12:00)。
我需要将StartDate
与StarTime
结合使用,以便在WHERE
子句中使用它,并将结果与变量进行比较。它看起来像是:
WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE
我正在使用SQL SERVER 2008。 这是现有的DB设计,不想改变它。也许,我可以创建第三列并将datetime + startdate组合成一列,但我正在寻找另一个解决方案(不接触数据库)。
答案 0 :(得分:2)
您可以使用以下内容:
WHERE
dateadd(minute, cast(right(starttime, 2) as int),
dateadd(hour, cast(left(starttime, 2) as int), startdate)) >= @DATETIME_VARIABLE
SQL Fiddle with DateTime Conversion
如果开始时间为null
,那么您可以在值周围使用IsNull()
:
WHERE
dateadd(minute, cast(right(isnull(starttime, 0), 2) as int),
dateadd(hour, cast(left(isnull(starttime, 0), 2) as int), startdate)) >= @DATETIME_VARIABLE
当然,如果您使用的是SQL Server 2008+,则只需将您的值转换为时间:
WHERE startdate + IsNull(StartTime, '00:00') >= @DATETIME_VARIABLE