将datetime与nvarchar结合使用

时间:2012-08-10 20:08:54

标签: sql sql-server tsql

我在DB中有两列:StartDate(日期时间列)和StartTime(nvarchar列)。 StartDate包含事件开始时的日期。 StartTime包含事件应该开始的时间。它是24小时格式(例如,22:00或12:00)。

我需要将StartDateStarTime结合使用,以便在WHERE子句中使用它,并将结果与​​变量进行比较。它看起来像是:

WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE

我正在使用SQL SERVER 2008。 这是现有的DB设计,不想改变它。也许,我可以创建第三列并将datetime + startdate组合成一列,但我正在寻找另一个解决方案(不接触数据库)。

1 个答案:

答案 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 Fiddle with Demo

当然,如果您使用的是SQL Server 2008+,则只需将您的值转换为时间:

WHERE startdate + IsNull(StartTime, '00:00') >= @DATETIME_VARIABLE

请参阅SQL Fiddle with Demo