日付を扱う場合、おそらく最も難しい作業は、挿入された日付の形式がデータベースの日付列の形式と一致することを確認することです。
データに日付部分のみが含まれている限り、クエリは問題なく実行されます。 ただし、タイミングが関係する場合、状況は少し複雑になります。
日付クエリの複雑さを説明する前に、最も重要な組み込みの日付処理関数を見てみましょう。
以下の表は、MySQL の最も重要な組み込み日付関数を示しています。
| 関数 | 説明 |
|---|---|
| NOW() | 現在の日付と時刻を返します |
| CURDATE() | 現在の日付を返します |
| CURTIME() | 現在時刻を返す |
| DATE() | 日付または日付/時刻式の日付部分を抽出します |
| EXTRACT() | 日付/時刻を別の部分で返します |
| DATE_ADD() | 指定した時間間隔を日付に追加します |
| DATE_SUB() | 日付から指定された時間間隔を減算します |
| DATEDIFF() | 2 つの日付の間の日数を返します |
| DATE_FORMAT() | 日付/時刻をさまざまな形式で表示する |
以下の表は、SQL Server の最も重要な組み込み日付関数を示しています。
| 関数 | 説明 |
|---|---|
| GETDATE() | 現在の日付と時刻を返します |
| DATEPART() | 日付/時刻の個々の部分を返します |
| DATEADD() | 指定された時間間隔を日付に加算または減算します |
| DATEDIFF() | 2 つの日付間の時間を返します |
| CONVERT() | 日付/時刻をさまざまな形式で表示する |
MySQL は、次のデータ型を使用して、日付または日付/時刻の値をデータベースに保存します。
SQL Server は、次のデータ型を使用して、日付または日付/時刻の値をデータベースに保存します。
時間部分が関係しない場合は、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'
その後、結果は得られません。 これは、クエリに時刻部分がない日付が原因です。
ヒント: クエリをシンプルにして保守しやすくしたい場合は、日付に時刻の部分を使用しないでください。