【SQLレシピ】DATE型をDATETIME型に変換する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【SQLレシピ】DATE型をDATETIME型に変換する

2023-11-27 | ,

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型に変換しつつ時刻の文字列を追加して、外側のCONVERTDATETIMEに変換する感じ。

おまけでCONVERTを使ってDateTime型をDate型に変換する例。

CONVERT(DATE, OrderedAt, 120)

CONVERT関数の第3引数の120はODBC canonical形式(YYYYH-MM-DD hh:mm:ss)でDATETIME型、DATE型にパースすることを表す。DATE型の場合はhh:mm:ssの部分は無視する。

まとめ(感想文)

この例だと、そもそも納品日の午後の注文を受け付けなければ良いという。