SQL Server where句に日付を使ったselect | WEBエンジニア社長のブログ

SQL Server where句に日付を使ったselect

今回は、 convert(varchar(10),getdate()-1,111) を紹介したいと思います。

これは、昨日の0:00:00.000を表します。


これが便利なのは、例えば、昨日のデータだけを抽出したい、というときです。



datetimeデータ型の列をselectする場合など、日付の扱いは注意が必要です。

それは、データが「日付+時刻」だからです。


例えば、ORDERDATE が 2009-08-10 のデータをselectする場合、

select * from ORDERDATE='2009-08-10'


とやってしまうと正しいデータが取得できない場合があります。


実際のデータをよく見てみると、

2009-08-10 00:00:00.000

2009-08-10 01:00:00.000

2009-08-10 23:59:59.997

2009-08-11 00:00:00.000

2009-08-11 01:00:00.000

と時間が丁寧に入っていたりするからです。


最初のクエリを実行すると「2009-08-10 00:00:00」のデータしかselectされません。


だから、より正しくは、これかと思いきや、間違いです。

select * from ORDERDATE between '2009-08-10' and '2009-08-10 23:59:59.999'

「2009-08-11 01:00:00.000」のデータもselectされてしまいます。


正しくは、これです。最後のコンマ以降の最大値は「997」だからです。

select * from ORDERDATE between '2009-08-10' and '2009-08-10 23:59:59.998'


コンマ以降のことなど考えるのは面倒だから、betweenは使うのをやめます。こうします。

select * from ORDERDATE where orderdate >= '2009-08-10' and orderdate< '2009-08-11'


Dailyレポートを作成する夜間batchを作成するなら、最初に紹介したconvertを使うのが便利です。

select * from ORDERDATE

  where orderdate >= convert(varchar(10),getdate()-1,111) and

      orderdate< convert(varchar(10),getdate(),111)



WEBエンジニア社長のタグクラウド

SQL Server    Management    リーダーシップ    Human    スタイルシート    マーケティング    ツイッター
   ASP    IT