DB

各DB上で特定の日付とシステム日付の1ヶ月前の日付を比較してみた

DBから特定の日付がシステム日付以降(1ヶ月以内)のデータを取得しようとした時に、日付の大小関係が分からなくなってしまったことがあった。

今回は、各DB上で「生年月日」を確認し、「生まれてから1ヶ月以内のデータ」「生まれてから1ヶ月を超えたデータ」「まだ生まれていない人のデータ」を取得してみたので、そのSQLを取得する。

前提条件

Oracle XEのインストールが完了していること。
また、下記記事に記載されている、MySQLとPostgreSQLでのユーザー作成が完了していること。

MySQLでユーザーを作成しテーブルを追加してみたMySQLの場合は、Workbenchを利用すると、スキーマ(データベース)やユーザーの作成をGUIベースで実施できる。今回は、Work...
Postgresqlでユーザーを作成しテーブルを追加してみたPostgresqlの場合は、pgAdminを利用すると、ユーザーやデータベースの作成をGUIベースで実施できる。今回は、pgAdmin...

さらに、下記記事の「前提条件」の内容が完了していること。

Spring BootでSQL Serverに接続しMyBatisを利用してみた今回は、Spring Bootアプリケーションで接続するデータベースをSQL Serverに変更してみたので、そのサンプルプログラムを共...

やってみたこと

  1. Oracleの場合の実行結果
  2. MySQLの場合の実行結果
  3. PostgreSQLの場合の実行結果
  4. SQL Serverの場合の実行結果

Oracleの場合の実行結果

Oracleの場合の実行結果は、以下の通り。

1) EMPLOYEEテーブルを作成する。

Oracle実行結果_1

2) EMPLOYEEテーブルのデータを初期化する。

Oracle実行結果_2_1

実行後のデータの内容は、以下の通り。

Oracle実行結果_2_2

3) 本日と、1ヶ月前の日付を取得する。これは、2021年4月18日に実行した結果となる。

Oracle実行結果_3_1

時・分・秒を切り捨てるには、以下のように、TRUNC関数を利用する。

Oracle実行結果_3_2

4) 生年月日をみて、生まれてから1ヶ月以内のデータを取得するSQLは、以下の通り。

Oracle実行結果_4_1

また、同じデータをBETWEEN句を使わないで取得するSQLは、以下の通り。

Oracle実行結果_4_2

5) 生年月日をみて、生まれてから1ヶ月を超えたデータを取得するSQLは、以下の通り。

Oracle実行結果_5

6) 生年月日をみて、まだ生まれていない人のデータを取得するSQLは、以下の通り。

Oracle実行結果_6



MySQLの場合の実行結果

MySQLの場合の実行結果は、以下の通り。

1) EMPLOYEEテーブルを作成する。

MySQLの実行結果_1

2) EMPLOYEEテーブルのデータを初期化する。

MySQLの実行結果_2_1

実行後のデータの内容は、以下の通り。

MySQLの実行結果_2_2

3) 本日と、1ヶ月前の日付を取得する。これは、2021年4月18日に実行した結果となる。

MySQLの実行結果_3_1

時・分・秒を切り捨てるには、以下のように、CURRENT_DATE関数を利用する。

MySQLの実行結果_3_2

4) 生年月日をみて、生まれてから1ヶ月以内のデータを取得するSQLは、以下の通り。

MySQLの実行結果_4_1

また、同じデータをBETWEEN句を使わないで取得するSQLは、以下の通り。

MySQLの実行結果_4_2

5) 生年月日をみて、生まれてから1ヶ月を超えたデータを取得するSQLは、以下の通り。

MySQLの実行結果_5

6) 生年月日をみて、まだ生まれていない人のデータを取得するSQLは、以下の通り。

MySQLの実行結果_6



PostgreSQLの場合の実行結果

PostgreSQLの場合の実行結果は、以下の通り。

1) EMPLOYEEテーブルを作成する。

PostgreSQL実行結果_1

2) EMPLOYEEテーブルのデータを初期化する。

PostgreSQL実行結果_2_1

実行後のデータの内容は、以下の通り。

PostgreSQL実行結果_2_2

3) 本日と、1ヶ月前の日付を取得する。これは、2021年4月18日に実行した結果となる。

PostgreSQL実行結果_3_1

時・分・秒を切り捨てるには、以下のように、CURRENT_DATE関数を利用する。

PostgreSQL実行結果_3_2

4) 生年月日をみて、生まれてから1ヶ月以内のデータを取得するSQLは、以下の通り。

PostgreSQL実行結果_4_1

また、同じデータをBETWEEN句を使わないで取得するSQLは、以下の通り。

PostgreSQL実行結果_4_2

5) 生年月日をみて、生まれてから1ヶ月を超えたデータを取得するSQLは、以下の通り。

PostgreSQL実行結果_5

6) 生年月日をみて、まだ生まれていない人のデータを取得するSQLは、以下の通り。

PostgreSQL実行結果_6



SQL Serverの場合の実行結果

SQLServerの場合の実行結果は、以下の通り。

1) EMPLOYEEテーブルを作成する。なお、制約は「ON DELETE SET NULL」だとエラーになるため、「ON DELETE NO ACTION」を指定している。

SQLServer実行結果_1

2) EMPLOYEEテーブルのデータを初期化する。

SQLServer実行結果_2_1

実行後のデータの内容は、以下の通り。

SQLServer実行結果_2_2

3) 本日と、1ヶ月前の日付を取得する。これは、2021年4月18日に実行した結果となる。

SQLServer実行結果_3_1

時・分・秒を切り捨てるには、以下のように、CONVERT関数を利用する。

SQLServer実行結果_3_2

4) 生年月日をみて、生まれてから1ヶ月以内のデータを取得するSQLは、以下の通り。

SQLServer実行結果_4_1

また、同じデータをBETWEEN句を使わないで取得するSQLは、以下の通り。

SQLServer実行結果_4_2

5) 生年月日をみて、生まれてから1ヶ月を超えたデータを取得するSQLは、以下の通り。

SQLServer実行結果_5

6) 生年月日をみて、まだ生まれていない人のデータを取得するSQLは、以下の通り。

SQLServer実行結果_6

要点まとめ

  • 各DB上で「生年月日」を確認し、「生まれてから1ヶ月以内のデータ」を取得するには、「生年月日」がシステム日付の1ヶ月前~システム日付のデータを取得すればよい。