PostgreSQLで文字数を半角文字基準で算出する。

処理内容

1.正規表現を使用して、半角カナを_に変換
2.任意の1バイト文字(半角空白から~まで)に合致しないものは全角文字なので、2文字分__に変換
3.lengthで文字数をカウント

SELECT length(
        regexp_replace(
            regexp_replace(/*column*/'ア', '[ア-ン゙゚ァ-ォャ-ョー。「」、]', '_', 'g')
            , '[^ -~]'
            , '__', 'g')
        );
--#フラグgは、最初にマッチしたもののみではなく、それぞれマッチした部分文字列の置換を指定

全角文字基準で算出するなら2で割ればいいが、文字数が奇数だった場合に整数での計算だと切り捨てられてしまうので注意が必要。

SELECT ceil(length(...) / 2.0);

PostgreSQLの正規表現の参考サイト
http://muchag.undo.jp/archives/443