6

ソフトウェアのユーザーが文字範囲でレコードを選択できる機能を追加する必要があります。
たとえば、名前が Ba-Bi の範囲にあるテーブルからすべてのウィジェットを返すクエリを作成するにはどうすればよいですか?

現在、大なり演算子と小なり演算子を使用しているため、上記の例は次のようになります。

select * from widget
where name >= 'ba' and name < 'bj'

「バイク」が取り残されないように、上限の最後の文字を i から j に「インクリメント」したことに注目してください。

フィールドの照合に基づいて、特定の文字の後に次の文字を見つける一般的な方法はありますか?それとも、2 つ目の条件を作成する方が安全でしょうか?

select * from widget
where name >= 'ba'
and (name < 'bi' or name like 'bi%')

私のアプリケーションはローカリゼーションをサポートする必要があります。この種のクエリは、さまざまな文字セットに対してどの程度敏感ですか?

また、MSSQL と Oracle の両方をサポートする必要があります。データに含まれる言語に関係なく、文字の大文字と小文字が区別されないようにするためのオプションは何ですか?

4

6 に答える 6

3

ローカリゼーションに直接スキップしましょう。"aa" >= "ba" と言えますか? おそらくそうではありませんが、スウェーデンではそれが分類されます。また、どの言語でも大文字小文字を無視できるとは限りません。大文字と小文字の区別は明らかに言語に依存しており、最も一般的な例はトルコ語です。大文字の i は İ です。小文字の I は ı です。

これで、SQL DB は「照合順序」によって <、== などの結果を定義します。これは間違いなく言語固有です。そのため、クエリごとにこれを明示的に制御する必要があります。トルコ語の照合順序は、それらの i をそれらが属する場所 (トルコ語) に配置します。デフォルトの照合に頼ることはできません。

「増分部分」については、気にしないでください。>= と <= に固執します。

于 2008-09-30T13:50:20.497 に答える
0

上限の末尾に並べ替えの高い文字列を追加するような単純なものを使用すると思います。何かのようなもの:

select * from widgetwhere name >= 'ba' and name <= 'bi'||'~'

ただし、EBCDIC変換に耐えられるかどうかはわかりません

于 2008-09-30T12:44:39.483 に答える
0

イライラすることに、Oracle の部分文字列関数は SUBSTR() ですが、SQL サーバーでは SUBSTRING() です。

同じ関数名 + プロトタイプを共有するように、それらの一方または両方の周りに単純なラッパーを書くことができます。

それからあなたはただ使うことができます

MY_SUBSTRING(name, 2) >= 'ba' AND MY_SUBSTRING(name, 2) <= 'bi'

または類似。

于 2008-09-30T11:59:42.527 に答える
0

あなたはこれを使うことができます...

select * from widget
where name Like 'b[a-i]%'

これは、名前が b で始まり、2 番目の文字が a から i の範囲にあり、他の文字が続くすべての行に一致します。

于 2008-09-30T12:21:45.390 に答える
0

次のようにすることもできます。

select * from widget
where left(name, 2) between 'ba' and 'bi'

基準の長さが変更された場合 (残したコメントで示したように)、クエリには入力として長さも必要です。

declare @CriteriaLength int
set @CriteriaLength = 4
select * from widget
where left(name, @CriteriaLength) between 'baaa' and 'bike'
于 2008-09-30T14:12:29.477 に答える
0

MSSQL については、次のスレッドを参照してください: http://bytes.com/forum/thread483570.html

Oracle の場合、Oracle 10 はクエリのような regex(p) をサポートするようになったため、Oracle のバージョンによって異なります: http://www.psoug.org/reference/regexp.html ( regexp_like を検索) および次の記事を参照してください: http:/ /www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html

HTH

于 2008-09-30T11:12:58.627 に答える