MySQLでvarchar型をdatetime型に変換して比較する方法
MySQLでvarcharをdatetimeに変換して比較するには?
varchar型として保存された日時データをdatetime型に変換して比較するには、STR_TO_DATE()関数を使用します。この関数を使うことで、文字列形式の日付データを指定したフォーマットでdatetime型に変換できます。
ここでは、実際の例を通じて具体的な手順を解説します。
1. サンプルテーブルの作成
まず、日時データをvarchar型のカラムに格納するテーブルを作成します。
mysql> create table DemoTable1565 -> ( -> ArrivalDatetime varchar(40) -> ); Query OK, 0 rows affected (0.82 sec)
2. レコードの挿入
INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。ここでは「MM/DD/YYYY HH:MM:SS」形式の文字列を格納しています。
mysql> insert into DemoTable1565 values('10/01/2019 21:29:35');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1565 values('10/13/2019 4:56:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1565 values('10/13/2018 12:40:46');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1565 values('10/13/2019 21:30:00');
Query OK, 1 row affected (0.58 sec)3. テーブル内の全レコードを表示
SELECT文で、テーブル内のすべてのレコードを確認します。
mysql> select * from DemoTable1565;
実行結果は以下の通りです。
+---------------------+ | ArrivalDatetime | +---------------------+ | 10/01/2019 21:29:35 | | 10/13/2019 4:56:00 | | 10/13/2018 12:40:46 | | 10/13/2019 21:30:00 | +---------------------+ 4 rows in set (0.00 sec)
4. 現在の日付を確認
比較対象となる現在の日付をNOW()関数で確認しておきましょう。
mysql> select now(); +---------------------+ | now() | +---------------------+ | 2019-10-13 21:34:14 | +---------------------+ 1 row in set (0.00 sec)
5. varcharからdatetimeへの変換と比較クエリ
以下が、STR_TO_DATE()関数を使ってvarchar型をdatetime型に変換し、現在の日付と比較するクエリです。フォーマット指定子「%m/%d/%Y」により、「月/日/年」形式の文字列を正しく解析しています。
mysql> select * from DemoTable1565 where str_to_date(ArrivalDatetime,'%m/%d/%Y')=curdate();
実行結果は以下の通りです。現在の日付(2019-10-13)と一致するレコードのみが抽出されました。
+---------------------+ | ArrivalDatetime | +---------------------+ | 10/13/2019 4:56:00 | | 10/13/2019 21:30:00 | +---------------------+ 2 rows in set, 4 warnings (0.03 sec)
補足:STR_TO_DATE()関数の主なフォーマット指定子
STR_TO_DATE()関数では、元の文字列の形式に合わせてフォーマット指定子を指定する必要があります。主な指定子は以下の通りです。
- %Y:4桁の年(例:2019)
- %m:2桁の月(01〜12)
- %d:2桁の日(01〜31)
- %H:24時間制の時(00〜23)
- %i:分(00〜59)
- %s:秒(00〜59)
なお、時刻部分まで含めて比較したい場合は、「'%m/%d/%Y %H:%i:%s'」のようにフォーマットを指定することで、時刻も正確に変換・比較できます。
-
MySQLでchar型カラムをdatetime型に変換する方法をわかりやすく解説
MySQLでは、char型として保存された日付文字列をdatetime形式に変換したいケースがあります。本記事では、REPLACE関数とSTR_TO_DATE関数を組み合わせて、「12/31/2017 10:50」のような米国式の日付文字列を「2017-12-31 10:50:00」というdatetime形式へ変換する手順を、実際のSQLと実行結果付きで解説します。サンプルテーブルの作成まず、テーブルを作成します。ここでは配送日(ShippingDate)をあえてchar型として宣言しています。mysql> create table DemoTable1472 &n
-
MySQLでvarchar型の時刻データを正しい時間形式に変換する方法
varchar型として保存された「1620」や「2345」のような時刻データを、実際の時間形式(例:04:20)に変換したい場合、MySQLのTIME_FORMAT()関数を使用することで実現できます。この記事では、SUBSTRING()とCONCAT()を組み合わせて、4桁の文字列を「時:分」の形式に整形する手順を解説します。1. サンプルテーブルの作成まず、到着時刻をvarchar型で格納するテーブルを作成します。mysql> create table DemoTable1591 -> ( -> ArrivalTime varchar(20) -&