Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

PostgreSQLでのLENGTH関数で文字列の長さを測ってみる(空白は取り除かれちゃうよ)

概要

タイトルが全てを物語っているので多くは語りません。

環境

PostgreSQL 10.5ぐらい

測ってみた

CREATE TABLE test_table  (
  val CHAR(12)
);

っていうテーブルがあったとして

INERT INTO test_table VALUES('test');

とした後に

SELECT val, LENGTH(val), OCTET_LENGTH(val), LENGTH(' ') , LENGTH(RPAD(val, 12, ' ')) FROM test_table;

します。

結果は

val LENGTH(val) OCTET_LENGTH(val) LENGTH(' ') LENGTH(RPAD(val, 12, ' '))
test 4 12 1 12

となりました。

つまりは?

PostgreSQLではLENGTHは半角空白を取り除いた長さとなります。バイト数を取得するOCTET_LENGTHでは半角空白混みでの長さ(バイト数)となります。

「文字列の長さ」と「バイト数」だからですかね? PostgreSQLではCHAR型であっても、文字列の長さには半角空白は含まない。ただし、文字列に対しては半角空白を含んでの長さを出力するようです。

ということで、Oracleと違うので注意が必要ですね。

追記

WEB+DB PRESSのVol112に、CHAR型に対するLENGTHは後ろの空白を除いた長さ、って書いてありました。