SQL Date 関数
SQL 日期
日付を処理する際には、最も難しいタスクは、挿入する日付のフォーマットがデータベースの日付カラムのフォーマットと一致することを確実にすることかもしれません。
データが含むのは日付部分だけなら、クエリの実行には問題がありません。しかし、時間が関与する場合は少し複雑になります。
日付クエリの複雑さについて議論する前に、最も重要な内蔵日付処理関数を見てみましょう。
MySQL Date 関数
以下のテーブルには、MySQLで最も重要な内蔵日付関数が示されています:
関数 | 説明 |
---|---|
NOW() | 現在の日付と時間を返す |
CURDATE() | 現在の日付を返す |
CURTIME() | 現在の時間を返す |
DATE() | 日付または日付/時間表現の日付部分を抽出する |
EXTRACT() | 日付/時間の単独の部分を返す |
DATE_ADD() | 日付に指定された時間間隔を加える |
DATE_SUB() | 日付から指定された時間間隔を減らす |
DATEDIFF() | 二つの日付の間の日数を返す |
DATE_FORMAT() | 異なるフォーマットで日付/時間を表示する |
SQL Server Date 関数
以下のテーブルには、SQL Serverで最も重要な内蔵日付関数が示されています:
関数 | 説明 |
---|---|
GETDATE() | 現在の日付と時間を返す |
DATEPART() | 日付/時間の単独の部分を返す |
DATEADD() | 日付に指定された時間間隔を加えたり減らしたりする |
DATEDIFF() | 二つの日付の間の時間を返す |
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 |
今、表から「2008-12-26」の OrderDate が含まれるレコードを選択したいと考えています。
以下の 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'
それでは、結果が得られません。これは、クエリに時間部分のない日付が含まれていないためです。
ヒント:クエリをシンプルでメンテナンスしやすいにする場合は、日付を使用する際に時間部分を使用しないでください!