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

MySQLでdd/mm/yyyy形式の文字列をUnixタイムスタンプに変換する方法

dd/mm/yyyy形式の文字列をUnixタイムスタンプへ変換する方法

MySQLでは、UNIX_TIMESTAMP()関数とSTR_TO_DATE()関数を組み合わせることで、「dd/mm/yyyy」(日/月/年)形式の日付文字列をUnixタイムスタンプに変換できます。基本構文は以下の通りです。

SELECT UNIX_TIMESTAMP(STR_TO_DATE(yourColumnName,'%d/%m/%Y')) as anyVariableName FROM yourTableName;

STR_TO_DATE()がフォーマット指定子「%d/%m/%Y」に従って文字列をDATE型に変換し、続くUNIX_TIMESTAMP()がその日付をUnixエポック(1970年1月1日 00:00:00 UTC)からの経過秒数に変換します。

サンプルテーブルの作成

構文の動作を確認するため、まずテーブルを作成します。テーブル作成クエリは以下の通りです。

mysql> create table ConvertddmmyyyyInUnixTimeStamp
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Created_at varchar(30),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.57 sec)

レコードの挿入

次に、INSERTコマンドを使って複数のレコードをテーブルに挿入します。

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('10/11/2012');
Query OK, 1 row affected (0.21 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('11/12/2013');
Query OK, 1 row affected (0.23 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('10/12/2012');
Query OK, 1 row affected (0.12 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('31/01/2015');
Query OK, 1 row affected (0.19 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('24/04/2016');
Query OK, 1 row affected (0.21 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('20/09/2017');
Query OK, 1 row affected (0.26 sec)

mysql> insert into ConvertddmmyyyyInUnixTimeStamp(Created_at) values('15/03/2018');
Query OK, 1 row affected (0.14 sec)

登録データの確認

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

mysql> select *from ConvertddmmyyyyInUnixTimeStamp;

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

+----+------------+
| Id | Created_at |
+----+------------+
| 1  | 10/11/2012 |
| 2  | 11/12/2013 |
| 3  | 10/12/2012 |
| 4  | 31/01/2015 |
| 5  | 24/04/2016 |
| 6  | 20/09/2017 |
| 7  | 15/03/2018 |
+----+------------+
7 rows in set (0.00 sec)

dd/mm/yyyy文字列をUnixタイムスタンプに変換する

それでは、実際にdd/mm/yyyy形式の文字列をUnixタイムスタンプへ変換してみましょう。

mysql> select unix_timestamp(str_to_date(Created_at,'%d/%m/%Y')) as UnixTimestamp from ConvertddmmyyyyInUnixTimeStamp;

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

+---------------+
| UnixTimestamp |
+---------------+
| 1352485800    |
| 1386700200    |
| 1355077800    |
| 1422642600    |
| 1461436200    |
| 1505845800    |
| 1521052200    |
+---------------+
7 rows in set (0.00 sec)

まとめと注意点

このように、STR_TO_DATE()でフォーマット指定子を明示的に指定して文字列を日付に変換し、その結果をUNIX_TIMESTAMP()に渡すだけで、任意の形式の日付文字列からUnixタイムスタンプを取得できます。

なお、UNIX_TIMESTAMP()の戻り値はセッションのタイムゾーン設定の影響を受けるため、環境によって値が異なる場合があります。また、本番環境ではVARCHAR型ではなくDATE型やDATETIME型で日付を保存しておくことで、変換処理の手間を省き、検索性能も向上させることができます。

  1. PHP・MySQLで日付形式をdd/mm/yyyyに変更する方法

    PHPやMySQLでは、日付の表示形式を自由に変更できます。本記事では、日付を「dd/mm/yyyy(日/月/年)」形式に変換する方法を、PHPとMySQLそれぞれのケースについて解説します。PHPで日付形式を変更する方法PHPでは、date()関数を使って日付形式を簡単に変更できます。基本構文は以下の通りです。date(d/m/Y, 日時の変数);また、文字列を日付として扱う場合は、strtotime()関数を使用します。この関数は、日付を表す文字列をUnixタイムスタンプに変換してくれるため、date()関数と組み合わせて使うのが一般的です。以下は、日時を「dd/mm/yyyy」形式に整形

  2. Pythonで日付文字列(mm/dd/yyyy)をdatetimeに変換する方法

    Pythonでは、標準ライブラリのdatetimeモジュールが提供するstrptime()関数を使うことで、文字列を日付(date)オブジェクトへ簡単に変換できます。変換の際は、「元の日付文字列」と「その文字列がどの形式で書かれているかを示すフォーマット指定子」の2つを引数として渡します。 基本的な使い方 import datetime date_str = 29/12/2017 # 日付文字列:2017年12月29日 format_str = %d/%m/%Y # フォーマット:「日/月/年」の形式 datetime_obj = datetime.datetime.strptim