[pgsql-jp: 33391] Re: Postgresql7.4.2 char列に対するmax関数の動作が7.3.3と異なる
ISHIDA Akio
iakio @ mono-space.net
2004年 6月 26日 (土) 16:01:00 JST
石田@苫小牧市です。
すいません。ちょっと違ってたみたいです。
おそらく、text型を引数にとるmax()という集合関数はあるが
char型を引数にとるものは無いので、max(char型のフィールド)
としたときに、text型へ暗黙の型変換が行なわれたため、
" " が "" なってしまったものと思われます。
みっともない方法ですが、あらかじめtextにしておいてから
rpad()でスペースを追加してやれば回避できそうです。
SELECT max(rpad(row1::text, 1, ' ')),2 from tmptable ;
# でもこれじゃあchar型つかう意味ないですねぇ。
あるいは、char型を扱うmax()があれば良いのかもしれません。
また、私が最初にあげた
SELECT '<' || ' '::char(5) || '>';
という例についても、暗黙の型変換の結果だと思います。
(ここはちゃんと調べてませんが)。
On Thu, Jun 24, 2004 at 09:36:58AM +0900, aya wrote:
> 「これは、ほとんどのユーザが常にそうなってほしいと期待
> している動作です。 」
> とありますが、
>
> 以下、石田さんのプログラム例や私のプログラム例の時に
> 該当するか?
>
> というと、どうなんだろう?
> 私はおかしいように感じます。
>
> charをvarcharやtext型に変換するときの
> 後続ブランクを除くというのは、
> 「char型"AAAA "というデータをvarcharに変換するとき」
> と思うですが、これはどのようなときかというと、、
>
> insert into A_table select * from B_tableという
>
> ような構文があったときに、A_tableの列がvarcharで
> B_tableの列がcharの時を指すように思います。
>
> このときでもchar(10)をvarchar(20)に入れるとき、
> "AAAA "を入れるときに"AAAA"にするか
> "AAAA "にするかは微妙かと思うのですが、
> " "というようにブランク一文字しかないときに、
> ""というように詰めてしまってよいかというと
> 期待していない動きに感じます、、、
RDBMS一般のことや、このような仕様変更があった経緯は
わかりませんが、私もこれはちょっとわかりづらいところだ
という気はします。
どうなんでしょうか > 識者のかた(ひき続き)
pgsql-jp メーリングリストの案内