【MySQL】文字列を日付型(DATE/TIMESTAMP)に変換する方法を徹底解説

スポンサーリンク

データベースを使っていると、よくあるのが「文字列として保存されている日付データを、正しい日付型に変換したい」という場面です。

たとえば、CSVで取り込んだデータに「2025/07/03」や「03-07-2025」といった日付のような文字列が入っていても、MySQLはそのままでは“日付”としては扱ってくれません。
このままだと、日付による並び替えや期間指定での絞り込みができなかったり、計算処理がうまくいかなかったりと、何かと不便なんですよね。

この記事では、よく使う日付フォーマット別の変換例を、なるべくやさしく・正確に解説していきます。
「なんとなく使ってたけど、イマイチ仕組みが分からない…」という方にも役立つ内容を目指していますので、ぜひ参考にしてみてください!

STR_TO_DATE()を使えば解決

文字列を日付型に変換するには、MySQLで用意されている STR_TO_DATE() という関数を使います。
この関数、名前の通り 「String(文字列)を Date(日付)に変換する」 という役割を持っています。

基本構文

STR_TO_DATE(変換したい文字列, 書式)

たとえば、こんな感じです。

SELECT STR_TO_DATE('2025-07-03', '%Y-%m-%d');

このクエリを実行すると、2025-07-03 という文字列が、MySQLの DATE 型として認識されて返ってきます。
※ただの文字列ではなく、日付として並び替え・比較ができるようになるのがポイントです。

書式(フォーマット)の指定が超重要

この関数で一番大事なのが、第2引数の「書式」です。
文字列の日付がどんな並びになっているかに応じて、正しいフォーマットを指定する必要があります。

以下は、よく使われる書式指定子の一部です。

書式意味
%Y西暦(4桁)2025
%y西暦(下2桁)25
%m月(01〜12)07
%d日(01〜31)03
%H時(00〜23)14
%i分(00〜59)30
%s秒(00〜59)00

たとえば、"03/07/2025" という文字列を変換したい場合は、書式に '%d/%m/%Y' を指定します。

SELECT STR_TO_DATE('03/07/2025', '%d/%m/%Y');

これを間違えて '%Y-%m-%d' などと書いてしまうと、MySQLは「ん?フォーマット合ってないぞ」と判断して、結果が NULL になります。

この STR_TO_DATE() を正しく使いこなせば、CSVインポート後の整形や、外部システムから受け取ったデータの変換処理がグッと楽になりますよ!

いろいろなパターンの変換例を紹介

では早速、STR_TO_DATE() 関数を使って、文字列を日付に変換してみましょう。

標準的な日付フォーマットをする

SELECT STR_TO_DATE('2025-07-03', '%Y-%m-%d');

このSQLを実行すると、2025-07-03 という文字列が、MySQLの DATE 型として認識されて返ってきます。

結果

2025-07-03

これは、'%Y-%m-%d' が「西暦4桁-月2桁-日2桁」という形式を意味しており、文字列と完全に一致しているため、正しく変換されるわけです。

時刻まで含める

SELECT STR_TO_DATE('2025-07-03 14:30:00', '%Y-%m-%d %H:%i:%s');

結果

2025-07-03 14:30:00

この場合、MySQLは DATETIME 型として認識します。
時間も扱いたい場面(ログのタイムスタンプや予約時間など)では、こちらの形式が便利です。

補足:変換後のデータ型について

STR_TO_DATE()戻り値として DATETIME を返します。
そのため、時間部分を含まない文字列を渡しても、実際は「00:00:00」が付いた形になります。

SELECT STR_TO_DATE('2025-07-03', '%Y-%m-%d');
-- → 2025-07-03 00:00:00(DATETIME型として扱われる)

ただし、DATE() 関数でラップすれば、日付部分だけを取り出すこともできます。

SELECT DATE(STR_TO_DATE('2025-07-03', '%Y-%m-%d'));
-- → 2025-07-03(DATE型)

まとめ

MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存されている日付データを正しい日付型に変換することができます。

日付のように見えるデータでも、文字列のままでは並び替え・期間抽出・計算などができず、扱いづらくなります。
そんなとき、この関数を使って適切に変換すれば、SQL上で日付としての操作が可能になります。

特に重要なのは 「フォーマットの一致」 です。
STR_TO_DATE() は与えた文字列と書式が1文字でも合っていないと、NULL を返してしまいます。

この記事では、以下のポイントを押さえました。

  • STR_TO_DATE(文字列, フォーマット) の基本構文
  • %Y-%m-%d%d/%m/%Y など、よく使うフォーマット例

実務では、CSVインポート後の整形処理や、API連携で取得したデータの変換など、文字列→日付変換の出番はとても多いです。

一度しっかり使い方を覚えておけば、きっと今後の開発やデータ処理で役立つはずです!

MySQL
スポンサーリンク
なんくるをフォローする

コメント

タイトルとURLをコピーしました