-2

DBにはStartDate(datetime列)とStartTime(nvarchar列)の2つの列があります。 StartDateイベントが開始する日付が含まれます。 StartTimeイベントを開始する時間を含みます。これは24時間形式です(たとえば、22:00または12:00)。

と組み合わせStartDateて句でStarTime使用し、結果を変数と比較する必要があります。WHERE次のようになります。

WHERE COMBINED_STARTDATE_WITH_STARTIME >= @DATETIME_VARIABLE

SQL SERVER 2008を使用しています。これは既存のDB設計であり、変更したくありません。おそらく、3番目の列を作成し、datetime + startdateを1つの列に組み合わせることができますが、別のソリューションを探しています(データベースには影響しません)。

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フィドル

開始時刻が次の場合は、次の値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 FiddlewithDemoを参照してください

もちろん、SQL Server 2008以降を使用している場合は、値を時間としてキャストできます。

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

SQL FiddlewithDemoを参照してください

于 2012-08-10T20:16:13.480 に答える