[pgsql-jp: 27241] Re: like述語での範囲指定について

Takao Kato sirius @ jp.fujitsu.com
2002年 9月 2日 (月) 14:25:49 JST


加藤@川崎です。

> これに対して、nameの'e000','#000','0.ab'を一発で抽出したいのですが、
> 要は、先頭文字にアルファベットとそれ以外の記号(数字含む)が混在する
> 場合の
> select name from usr where substring(name,1,1) between 'e' and '#';
>                                                        ~~~~~~~~~~~~
>                                                        ここの指定方法が
> 知りたいのですが。。。

先の結果が理解できているのであれば、「今自分が抽出したくないのは?」と
考えると楽かと。先頭が a〜d の範囲ではじまるカラムを抽出したくないので
すよね?それなら次のように論理だてすればよろしいかと。
# 処理効率の観点からNGとか言われると ^^;;

(1)a〜d ではじまる列を抽出するクエリを考える。
   これは張さん達が説明されているとおり、

   psql=> select name from usr where name >= 'a' and name < 'e';

   ですね。

(2)本当に欲しいのは(1)で求めた条件に合わないもの
   (1)の条件文にマッチしないものを抽出すれば良いのですから、条件文はそ
   のままで結果を反転(not)すれば良いので、

   psql=> select name from usr where not(name >= 'a' and name < 'e');

   となりますね。


では
----
加藤@川崎



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