[SQL] 書き込み日付のフォーマットを書き間違えていたので、書き換える処理備忘録

SQL
仕事でとあるシステムを作っていた時に、データベースにロギングする値を書き換える作業があったのだが、バッチ処理でバリバリ書いていく、いわゆるログデータでした。 このログデータ、あとで見直してみたところ、日付フォーマットが、次のように間違ったフォーマットになっていたのである。
【正解】 2024-01-01 12:01:23 【誤り】2024-01-01 12-01-23
アホなミスですね。 PHPで書き込んでいたんですが、SQLiteだったために、Dateフォーマットなんていう便利な型が無く、エラーも出ずに延々ログとして書き込まれていました。

同一テーブルの値を書き換えるSQL文

まず最初に思いついたのが、正規表現を使って、日付はそのまま、時刻の箇所のセパレータを書き換えるという方法でしたが、 SQLITEは、デフォルトでRegexp機能は入っていません。 拡張させてもいいのですが、日付フォーマットなので、文字列長が同じだし、書き換えポイントが同じということで、次のコマンドを実行することで、書き換えが出来た。 UPDATE Logs SET date = substr(date, 1,13) ||':'|| substr(date, 15,2) ||':'|| substr(date, 18,2); 文字列の一をちゃんとカウントしておけば、問題ないですよ。 ちなみに、substrは、カウント1スタートなので、要注意です。