TECH I.S.

日付を扱うSQL


SQLの日付

日付を扱うときに最も難しいのは、挿入しようとしている日付の形式がデータベースの日付列の形式と一致していることを確認することです。

データに日付部分のみが含まれている限り、クエリは期待どおりに機能します。ただし、時間の部分が含まれる場合は、さらに複雑になります。


SQL 日付データ型

MySQLには、データベースに日付または日付/時刻の値を格納するための次のデータ型が付属しています。

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

SQLServerには、データベースに日付または日付/時刻の値を格納するための次のデータ型が付属しています。

  • DATE- YYYY-MM-DD形式
  • DATETIME- 形式: YYYY-MM-DD HH:MI:SS
  • SMALLDATETIME- 形式: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP- 形式: 一意の番号

注:日付の種類は、データベースに新しいテーブルを作成するときにカラムに選択されます!



SQL 日付の操作

次の表を見てください。

注文表

オーダーID 商品名 注文日
1 ヤギ乳チーズ 2008-11-11
2 カマンベールピエロ 2008-11-09
3 ジョンのモッツァレラ 2008-11-11
4 マスカルポーネ・ファビオリ 2008-10-29

次に、上のテーブルからOrderDateが「2008-11-11」のレコードを選択します。

以下を使用しますSELECT

<div>SELECT * FROM Orders WHERE OrderDate='2008-11-11'</div>

結果セットは次のようになります。

オーダーID 商品名 注文日
1 ヤギ乳チーズ 2008-11-11
3 ジョンのモッツァレラ 2008-11-11

注:時間要素が含まれていなければ、2つの日付を簡単に比較できます。

ここで、"Orders"テーブルが次のようになっているとします ("OrderDate"列に時間コンポーネントが追加されていることに注意してください)。

オーダーID 商品名 注文日
1 ヤギ乳チーズ 2008-11-11 13:23:44
2 カマンベールピエロ 2008-11-09 15:45:21
3 ジョンのモッツァレラ 2008-11-11 11:12:01
4 マスカルポーネ・ファビオリ 2008-10-29 14:56:59

上記と同じSELECT文を使う場合:

<div>SELECT * FROM Orders WHERE OrderDate='2008-11-11'</div>

結果は得られません!これは、クエリが時間部分のない日付のみを検索しているためです。


ヒント:クエリを単純にして維持しやすくするために、必要でない限り、日付に時間コンポーネントを使用しないでください。




プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細