1

SQLサーバー2008に次のテーブルがあります(「act_events」と呼ばれます):

ここに画像の説明を入力

お気づきのように、日付時刻の一部が「yyyy-mm-dd」と「yyyy-dd-mm」のようにフォーマットされています。

次のようなクエリがあります。

SELECT * from act_events
WHERE '2013-07-30'>=(CAST(e_start as DATE)) AND 
      '2013-07-30'<=(CAST(e_end as DATE))

今日の日付だけでイベントを選択したい場所。

しかし、両方の形式を選択する方法がわかりません..

私はこのクエリを試します:

SELECT * from act_events 
WHERE( @date1>=(CAST(e_start as DATE)) AND
        @date2<=(CAST(e_end as DATE)) ) OR
      ( @date3>=(CAST(e_start as DATE)) AND
        @date4<=(CAST(e_end as DATE)) )

しかし、それは特定の日付でのみ機能します..

あなたの答えをいただければ幸いです。

また、すべての日時を正しい形式に変更するステートメントがあれば、ぜひ聞いてみたいです。

4

2 に答える 2

1

日付が実際に typeDateTimeであると仮定すると、この場合にできることは、dateadd と datediff を使用することです。

次の 2 つのステートメントを実行します。

-- Todays date, date part only
select dateadd(dd, 0, datediff(dd, 0, getdate()))
-- Tomorrows date, date part only
select dateadd(dd, 0, datediff(dd, 0, dateadd(dd, 1, getdate())))

これら2つを使用して、これを行うことができます(編集を含む、@gveeに感謝します)

select *
from act_events 
where 
        e_start >= dateadd(dd, 0, datediff(dd, 0, getdate())) 
    and 
        e_end < dateadd(dd, 0, datediff(dd, 0, getdate()) + 1)

これはgetdate()SQL Server の組み込み関数です。たとえば、これをストアド プロシージャで使用している場合は、もちろんこれを変数に変更できます。

ちなみに、SQL Server の日付は実際には数字です。見たときに出てくるフォーマットは人間用で人間を信用してはいけませんよね?

于 2013-07-30T12:25:11.120 に答える
0
select *

from t 
where 
   CONVERT(nvarchar(30), GETDATE(), 112)=substring(date_c,1,4)
       +substring(date_c,6,2)
       +substring(date_c,9,2)
   or
   CONVERT(nvarchar(30), GETDATE(), 112)=substring(date_c,1,4)
       +substring(date_c,9,2)
       +substring(date_c,6,2)

SQLFiddle デモ

于 2013-07-30T12:30:10.887 に答える