Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQLでの文字列の日付から日付形式に変換する方法(STR_TO_DATE)

毎回忘れる、MYSQLの文字列->日付変換についてメモしました。例えば、rssのフィード内によくある、publishedとかとか。。これを日付/時刻型に変換するにはどうすればいいか?なんていうのを例につらずらと書いていきます。

<pubDate>Sun, 29 Jul 2018 21:00:00 +0900</pubDate>

STR_TO_DATE

STR_TO_DATE() は、書式文字列に日付と時間の両方の部分が含まれる場合は DATETIME 値を返し、文字列に日付と時間の部分の一方のみが含まれる場合は DATE または TIME 値を返します。DATE_FORMAT関数とは逆の動きをするといった感じでしょうか。

書式

STR_TO_DATEの書式は以下の通りです

STR_TO_DATE( 文字列 , フォーマット)

誤った 文字列 が含まれている場合、STR_TO_DATE() は NULL になります

フォーマットについて

フォーマット 説明
%a 週の名前(省略) (Sun - Sat)
%b 月の名前(省略)(Jan - Dec)
%c 月 (0 - 12)
%D 月の名前 (1st, 2nd, 3rd, ...)
%d 日 (01 - 31)
%e 日 (0 - 31)
%f マイクロ秒 (000000 - 999999)
%H 時(24時間表記) (00 - 23)
%h 時(12時間表記) (00 - 12)
%I 時(12時間表記) (00 - 12)
%i 分 (00 - 59)
%j 一年換算での日数 (001 - 366)
%k 時(頭ゼロなし) (0 - 23)
%l 時(12時間表記)(1 - 12)
%M 月の名前(完全) (January - December)
%m 月 (00 - 12)
%p 午前/午後(AM or PM)
%r AM/PM時間形式 (hh:mm:ss AM/PM)
%S 秒 (00 - 59)
%s 秒 (00 - 59)
%T 24時間フォーマット (hh:mm:ss)
%U わからん
%u わからん
%V わからん
%v わからん
%W 週の名前(完全) (Sunday - Saturday)
%w 週の番号 (Sunday=0 -> Saturday=6)
%X わからん
%x わからん
%Y 年(2018)
%y 年(18)

まあ、わからんものは使い方がよくわからないので説明を割愛しました(笑)

お題目含めて、例を書いていきます。

お題目のrss feedのpublished

Tue, 03 Jul 2018 10:49:00 +0900

SELECT STR_TO_DATE("Tue, 03 Jul 2018 10:49:00 +0900","%a, %d %b %Y %H:%i:%s") + INTERVAL 9 HOUR AS str_date;
+---------------------+
| str_date            |
+---------------------+
| 2018-07-03 19:49:00 |
+---------------------+

もしくは、

SELECT CONVERT_TZ(STR_TO_DATE("Tue, 03 Jul 2018 10:49:00 +0900","%a, %d %b %Y %H:%i:%s"),'+00:00','+09:00') AS str_date;
+---------------------+
| str_date            |
+---------------------+
| 2018-07-03 19:49:00 |
+---------------------+

と、このような形になります。タイムゾーンだけ、どうやって変換するのかわからなかったです(ごめんなさい)

随時、例は追加していきます

f:id:hit10231023:20180309104332j:plain