【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
の部分は無視する。
まとめ(感想文)
この例だと、そもそも納品日の午後の注文を受け付けなければ良いという。