
データベースを使っていると、よくあるのが「文字列として保存されている日付データを、正しい日付型に変換したい」という場面です。
たとえば、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
を返してしまいます。
この記事では、以下のポイントを押さえました。
実務では、CSVインポート後の整形処理や、API連携で取得したデータの変換など、文字列→日付変換の出番はとても多いです。
一度しっかり使い方を覚えておけば、きっと今後の開発やデータ処理で役立つはずです!
コメント