【SQLレシピ】DATE型をDATETIME型に変換する
2023-11-27 | SQL, SQL Server
SQL SeverでDATE型をDATETIME型に変換してWHEREとかで使いたい!
概要
この記事では、SQL SeverでDATE型をDATETIME型に変換してWHEREとかで使う手順を掲載する。
仕様書
環境
- SQL Server 15.0.2104
手順書
テーブルOrdersには注文データが入ってて、列OrderedAtは何かを注文した日時(DATETIME型)が入力されてて、列ReceivedOnには注文した何かを受け取る納品日(DATE型)が入力されてるとする。
下記のクエリは'2023-11-27'に納品される注文で納品日の午前中までに注文のあったレコードのIdを出力する例。
SELECT Id
FROM Orders
WHERE
ReceivedOn = '2023-11-27'
AND OrderedAt < CONVERT(DATETIME, CONVERT(VARCHAR, ReceivedOn) + ' 12:00', 120);
内側のCONVERTで一旦VARCHAR型に変換しつつ時刻の文字列を追加して、外側のCONVERTでDATETIMEに変換する感じ。
おまけでCONVERTを使ってDateTime型をDate型に変換する例。
CONVERT(DATE, OrderedAt, 120)
CONVERT関数の第3引数の120はODBC canonical形式(YYYYH-MM-DD hh:mm:ss)でDATETIME型、DATE型にパースすることを表す。DATE型の場合はhh:mm:ssの部分は無視する。
まとめ(感想文)
この例だと、そもそも納品日の午後の注文を受け付けなければ良いという。
