SQLite3 で正規表現で文字列置換したかったんですが、出来なそうだったので、あきらめて、一旦CSVファイルにエクスポートしてから、テキストエディタで正規表現文字列置換してから、SQLite3のデータベースファイルに戻すという方法で正規表現置換することにしました。
その時に作ったバッチを載せておきます。(記事の下の方に zip ファイルでバッチ自体も添付してあります)
以下がSQLite3のデータベースのテーブルの中身をCSVファイルに出力するバッチファイルです。
ExportToCsv.bat
@echo off
set INPUT_DB=%1
set TABLE_NAME=%2
set OUT_CSV=%~n1.csv
set TEMP_FILE=%~dp0tmp.query
rem 実行クエリのファイル出力
echo .headers on>%TEMP_FILE%
echo .mode csv>>%TEMP_FILE%
echo .output %OUT_CSV%>>%TEMP_FILE%
echo SELECT * FROM %TABLE_NAME%;>>%TEMP_FILE%
echo .quit>>%TEMP_FILE%
rem 実行
sqlite3.exe %INPUT_DB% < %TEMP_FILE%
del %TEMP_FILE%
例えば、以下のように第一引数にデータベースファイルであるmy_database.db、第二引数にテーブル名であるmy_tableを入力すると、my_database.csv に my_table の中身が出力されます。
ExportToCsv.bat my_database.db my_table
これで書き出したCSVファイルを正規表現置換ができるテキストエディタで読み込むなどして編集します。
以下は編集したCSVを元のデータベースファイルにインポートして戻すためのバッチファイルです。
ImportFromCsv.bat
@echo off
set INPUT_DB=%1
set TABLE_NAME=%2
set OUT_CSV=%~n1.csv
set TEMP_FILE=%~dp0tmp.query
rem 実行クエリのファイル出力
echo .headers on>%TEMP_FILE%
echo .mode csv>>%TEMP_FILE%
echo .output %OUT_CSV%>>%TEMP_FILE%
echo SELECT * FROM %TABLE_NAME%;>>%TEMP_FILE%
echo .quit>>%TEMP_FILE%
rem 実行
sqlite3.exe %INPUT_DB% < %TEMP_FILE%
del %TEMP_FILE%
例えば、以下のように第一引数にCSVファイルであるmy_database.csv、第二引数にインポート先のテーブル名である my_table を渡すと、my_database.db の my_table にmy_database.csvの中身が出力されます。
ImportFromCsv.bat my_database.csv my_table
sqlite3.exe 含めたバッチを zip にして貼っておきます。