[pgsql-jp: 28018] Re: 文字列を数値でselect する方法

Mashiki mashiki @ yanah.com
2002年 11月 18日 (月) 23:13:42 JST


 Mashikiです。

>やはりIndexはきかなくなるのですか。。。
>ところで、数字変換かけることできかなくなるのでしょうか。
>それとも最初の「Rtrim」したところできかなくなるのでしょうか。

関数や演算が入ったら基本的には効かなくなります。
postgreSQLの場合には、関数インデックスがつけられるので


以下のように関数呼び出しを単純化してから、

create or replace function tonum(char) returns numeric as '
	select to_number(ltrim(rtrim($1)),''999999999'') as result;
' language sql with (iscachable);

create index ix_testtable on testtable (tonum(value));

のようにインデックスを張れば、

select * from testtable where tonum(value)=1234

のような、検索のパフォーマンスを向上することができます。

ただ、ぐちゃぐちゃやるより、DBに格納する段階で数値化しておくほうが、
見通しもメンテナンス性もいいでしょう。



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