MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでOracleのTRUNC(SYSDATE)と同等の処理を行う方法|DATE()とCURDATE()の使い方

はい、可能です。MySQLでは DATE() 関数を使えばdatetime型の値から日付部分のみを取り出すことができ、CURDATE() 関数を使えば現在の日付を取得できます。この2つを組み合わせることで、Oracleの TRUNC(SYSDATE) と同様の「本日の日付だけを比較する」処理が実現できます。

1. 現在の日付を確認する

まず、CURDATE()で現在の日付を取得してみましょう。

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-10-20 |
+------------+
1 row in set (0.00 sec)

時刻を含まない「2019-10-20」という形式で日付が返されていることがわかります。

2. サンプルテーブルを作成する

動作確認のため、datetime型のカラムを持つテーブルを作成します。

mysql> create table DemoTable1613
   -> (
   -> PostingDate datetime
   -> );
Query OK, 0 rows affected (0.48 sec)

次に、INSERT文でいくつかのレコードを登録します。

mysql> insert into DemoTable1613 values('2019-10-20 12:02:45');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1613 values('2018-10-20 12:02:45');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1613 values('2015-10-20 12:02:45');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1613 values('2019-10-20 10:00:00');
Query OK, 1 row affected (0.22 sec)

3. 登録したデータを確認する

SELECT文ですべてのレコードを表示します。

mysql> select * from DemoTable1613;

実行結果は以下の通りです。

+---------------------+
| PostingDate         |
+---------------------+
| 2019-10-20 12:02:45 |
| 2018-10-20 12:02:45 |
| 2015-10-20 12:02:45 |
| 2019-10-20 10:00:00 |
+---------------------+
4 rows in set (0.00 sec)

4. OracleのTRUNC(SYSDATE)相当のクエリを実行する

ここがポイントです。DATE(PostingDate) で時刻を切り捨てた日付部分を取り出し、それを CURDATE()(本日の日付)と比較することで、「投稿日が今日であるレコード」だけを抽出できます。

mysql> select * from DemoTable1613 where date(PostingDate)=curdate();

実行結果:

+---------------------+
| PostingDate         |
+---------------------+
| 2019-10-20 12:02:45 |
| 2019-10-20 10:00:00 |
+---------------------+
2 rows in set (0.00 sec)

補足:パフォーマンスに関する注意点

上記の書き方はシンプルでわかりやすい一方、カラムに関数を適用するとインデックスが利用されにくくなる場合があります。大量データを扱う場合は、範囲条件を使った以下のような書き方も検討するとよいでしょう。

SELECT * FROM DemoTable1613
WHERE PostingDate >= CURDATE()
  AND PostingDate < CURDATE() + INTERVAL 1 DAY;

このようにMySQLでは DATE()CURDATE() を組み合わせることで、Oracleの TRUNC(SYSDATE) と同じ「日付単位の比較」を簡単に実装できます。

  1. MySQLでISNULL()のように使えるIF()関数でゼロ値を任意の値に置き換える方法

    MySQLでは、ISNULL()関数がNULL値の判定に使われるように、0(ゼロ)の値を別の値に置き換えたい場合には、IF()関数を活用すると便利です。IF(条件, 真の場合の値, 偽の場合の値)という構文を使えば、値が0のときだけ任意の値を返すように設定できます。ここでは、実際にテーブルを作成し、0を含むデータに対してIF()関数を適用する手順を解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成しましょう。 mysql> create table DemoTable749 (Value int); Query OK, 0 rows affected (1.02 s

  2. Pythonのformat()関数とは?基本から応用まで使い方を徹底解説

    Pythonのformat()メソッドは、指定した値を整形して文字列内のプレースホルダー({})に埋め込むための便利な機能です。数値や文字列を自由に組み込んだ読みやすい出力を作成できるため、日常的なプログラミングで頻繁に活用されています。この記事では、format()関数のさまざまな使い方を具体例とともにわかりやすく紹介します。単一のプレースホルダーに値を埋め込むまずは最も基本的な使い方です。指定した範囲の数値を、固定文字列の中のプレースホルダーへ順番に代入してみましょう。コード例for i in range(19,25): print(There are {} boxes!.form