SQL の日付

日付を扱う場合、おそらく最も難しい作業は、挿入された日付の形式がデータベースの日付列の形式と一致することを確認することです。

データに日付部分のみが含まれている限り、クエリは問題なく実行されます。 ただし、タイミングが関係する場合、状況は少し複雑になります。

日付クエリの複雑さを説明する前に、最も重要な組み込みの日付処理関数を見てみましょう。

MySQL 日付関数

以下の表は、MySQL の最も重要な組み込み日付関数を示しています。

関数 説明
NOW() 現在の日付と時刻を返します
CURDATE() 現在の日付を返します
CURTIME() 現在時刻を返す
DATE() 日付または日付/時刻式の日付部分を抽出します
EXTRACT() 日付/時刻を別の部分で返します
DATE_ADD() 指定した時間間隔を日付に追加します
DATE_SUB() 日付から指定された時間間隔を減算します
DATEDIFF() 2 つの日付の間の日数を返します
DATE_FORMAT() 日付/時刻をさまざまな形式で表示する

SQL Server Date 関数

以下の表は、SQL Server の最も重要な組み込み日付関数を示しています。

関数 説明
GETDATE() 現在の日付と時刻を返します
DATEPART() 日付/時刻の個々の部分を返します
DATEADD() 指定された時間間隔を日付に加算または減算します
DATEDIFF() 2 つの日付間の時間を返します
CONVERT() 日付/時刻をさまざまな形式で表示する

SQL Date データ型

MySQL は、次のデータ型を使用して、日付または日付/時刻の値をデータベースに保存します。

  • DATE - YYYY-MM-DD 形式
  • DATETIME - 形式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 形式: YYYY-MM-DD HH:MM:SS
  • YEAR - YYYY または YY の形式

SQL Server は、次のデータ型を使用して、日付または日付/時刻の値をデータベースに保存します。

  • DATE - YYYY-MM-DD 形式
  • DATETIME - 形式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 形式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 形式: 一意の数値

SQL の日付処理

時間部分が関係しない場合は、2 つの日付を簡単に比較できます。

次の「Orders」テーブルがあるとします。

OrderId ProductName OrderDate
1 computer 2008-12-26
2 printer 2008-12-26
3 electrograph 2008-11-12
4 telephone 2008-10-19

ここで、上のテーブルから OrderDate「2008-12-26」のレコードを選択します。

次の SELECT ステートメントを使用します。

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

結果セット:

OrderId ProductName OrderDate
1 computer 2008-12-26
3 electrograph 2008-12-26

ここで、「Orders」が次のようになっているとします (「OrderDate」列の時刻の部分に注目してください)。

OrderId ProductName OrderDate
1 computer 2008-12-26 16:23:55
2 printer 2008-12-26 10:45:26
3 electrograph 2008-11-12 14:12:08
4 telephone 2008-10-19 12:56:10

上記の SELECT ステートメントを使用すると:

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

その後、結果は得られません。 これは、クエリに時刻部分がない日付が原因です。

ヒント: クエリをシンプルにして保守しやすくしたい場合は、日付に時刻の部分を使用しないでください。