1-12みたいな連番文字列を01012に一括変換したかった。別のカラムに分けるのが普通でしょうが、諸事情により。
SQLiteの組み込み関数には日付の操作関数は充実してるけど、文字列操作関数は大したものがない。
それで、Tclでやることにした。
package require sqlite3 sqlite3 db ./app.db; # handle and database file db eval {SELECT * FROM squence WHERE field LIKE "%-%"} values { set R-V $values(field) if {[scan ${R-V} %d-%d R V] == 2} { set RRVVV [format %02d%03d $R $V] db eval [format {UPDATE squence SET field="%s" WHERE id=%d} $RRVVV $values(id)] } } |
02012みたいなのは、クォートしないと数値とみなされて2012みたいになってしまうので注意が必要です。
LIKE以外にもGLOBやREGEXPも使えるらしい。
050-で始まる電話番号を持つ人のリストを取得するなど。
select * from users where phone_number REGEXP "^050-.+$"