Sql 将datetime与nvarchar相结合

Sql 将datetime与nvarchar相结合,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在数据库中有两列:StartDate(datetime列)和StartTime(nvarchar列)。 StartDate包含事件开始的日期。 StartTime包含事件应该开始的时间。它是24小时格式(例如,22:00或12:00) 我需要将StartDate与StarTime组合在一起,以便在WHERE子句中使用它,并将结果与变量进行比较。它看起来像: WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE 我正在使

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

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

WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE
我正在使用SQLServer2008。
这是现有的数据库设计,不想更改它。也许,我可以创建第三列并将datetime+startdate组合到一列中,但我正在寻找另一种解决方案(不涉及数据库)。

您可以使用以下方法:

WHERE 
dateadd(minute, cast(right(starttime, 2) as int),
    dateadd(hour, cast(left(starttime, 2) as int), startdate)) >= @DATETIME_VARIABLE

如果开始时间为
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

请参见

如果性能很重要,在使用WHERE子句运行任何查询之前,您可能希望将日期和时间合并到另一列中。此表上是否有主键或标识列?请选择SQL Server的哪个版本?为什么要单独存储这些数据,并使用糟糕的数据类型执行此操作?@rs:
如果StartTime不为NULL,则。。。其他的结束