【PostgreSQL】文字列のバイト数を取得する

2020年7月14日

スポンサーリンク

説明

文字列をバイト数で計算します。

 

引数

引数1(character varying):対象の文字列

引数2(integer):全角のカウント方法の指定 

1:全角1文字=2バイトで計算 1以外:全角1文字=3バイトで計算

 

返り値

バイト数

 

コード

CREATE OR REPLACE FUNCTION count_char_byte(
    c_target_char character varying,
    i_flg integer)
  RETURNS numeric AS
$BODY$
declare
BEGIN
	if i_flg = 1 then
		--1:全角1文字=2バイトで計算
		return length(
		regexp_replace(
		    regexp_replace(c_target_char, '[ア-ン゙゚ァ-ォャ-ョー。「」、]', '_', 'g')
		    , '[^ -~]'
		    , '__', 'g')
		);
	else
		--その他:全角1文字=3バイトで計算
		return octet_length(c_target_char); 
        end if;
        
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION count_char_byte(character varying, integer)
  OWNER TO postgres;

※PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら

 

実行例

select * From count_char_byte('あいuえお',1); --全角1文字=2バイトで計算 
--【結果】:9
 
select * From count_char_byte('あいuえお',2); --全角1文字=3バイトで計算 
--【結果】:13

 

PostgreSQLの構文まとめを書いています

入門~経験者まで「基本構文・こんな時どう書くんだっけ?」のまとめ