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,则。。。其他的结束