[pgsql-jp: 41510] キャストした文字列の比較

oka oka @ tmail.plala.or.jp
2013年 10月 2日 (水) 02:06:59 JST


okaと申します。

文字列の比較で2つ質問があります。

1. 
create table chartbl
(
caseno int,
varchar5 varchar(5)
);
insert into chartbl values(1, ' ');
insert into chartbl values(2, '');

というデータがあります。

select * from chartbl where varchar5 = ' '
ですと、caseno 1のみがヒットします。
select * from chartbl where varchar5 = ''
ですと、caseno 2のみがヒットします。

これを
select * from chartbl where varchar5 = ' '::bpchar
にすると、caseno 1と2がヒットします。

これはなぜなのでしょうか。
PostgreSQLのchar型はパディングされるとのことなので
その作用なのでしょうか。

2.
 上の ' '::bpchar を N' ' としても同等の結果を得ることが
できるのですがこれは同一の意味になるのでしょうか。
同一の意味ならば、PostgreSQLの仕様なのでしょうか、それとも
たまたま同じ結果になっているだけで将来的に結果がかわる可能性
があるのでしょうか。

SQL Serverは比較の際に末尾の空白を無視する仕様があり、
select * from chartbl where varchar5 = N' '
がPostgreSQLでも問題なければ、SQL ServerとPostgreSQLを同じSQL文
で対応できるかもと考えたしだいです。
きれいな対応ではありませんが…。

以上よろしくお願いします。



pgsql-jp メーリングリストの案内