-2

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

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

WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE

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

4

1 回答 1

2

你可以使用这样的东西:

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

SQL Fiddle 与 DateTime 转换

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

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

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

请参阅带有演示的 SQL Fiddle

于 2012-08-10T20:16:13.480 回答