4

DATA列(varchar)に次のようなデータがあります。

Nowshak 7,485 m
Maja e Korabit (Golem Korab) 2,764 m
Tahat 3,003 m
Morro de Moco 2,620 m
Cerro Aconcagua 6,960 m (located in the northwestern corner of the province of Mendoza)
Mount Kosciuszko 2,229 m
Grossglockner 3,798 m

私が欲しいのはこれです:

7485
2764
3003
2620
6960
2229
3798

IBM DB2バージョン9.5には、次のようにして、数字以外の文字をすべて削除/削除する方法がありますか?

SELECT replace(DATA, --somekind of regular expression--, '') FROM TABLE_A

または他の方法?

この質問は、この質問の後に続きます。

4

8 に答える 8

5

他の質問で示唆されているように、TRANSLATE関数が役立つ場合があります。たとえば、次のことを試してください。

select translate('Nowshak 7,485 m','','Nowshakm,') from sysibm.sysdummy1;

戻り値:

7 485

おそらく少し調整するだけで、希望どおりの結果を得ることができます...関数の3番目の引数で、アルファベット全体を指定する必要があります。ちょっと醜いですが、うまくいきます。

于 2009-02-27T21:53:01.417 に答える
4

これを実現する簡単な方法の 1 つは、TRANSLATE(value, replacewith, replacelist) 関数を使用することです。リスト (3 番目のパラメーター) 内のすべての文字を 2 番目のパラメーターの値に置き換えます。

これを利用して、スペースを含む文字列から数値以外のすべての文字を本質的に消去できます。

3 番目のパラメーターのリストに、不要な可能性のあるすべての文字を含めるだけです。それらを空のスペースに変換すると、必要な文字だけになり、本質的に不要な文字が消去されます.

注:あなたの例よりも多様な文字値を持つ可能性のある他の人のために、一般的な記号(英数字以外)をすべて含めました。

Select 
   TRANSLATE(UCASE(CHAR_COLUMN),'',
            'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-=+/\{}[];:.,<>? ')
FROM TABLE_A

より簡単に:特定の値のセットについては、可能な文字のセットがはるかに少ないため、置換リストを次のようにトリミングできます。

Select 
   TRANSLATE(UCASE(CHAR_COLUMN),'','ABCDEFGHIJKLMNOPQRSTUVWXYZ(), ')
FROM TABLE_A

注: CHAR_COLUMN の「UCASE」は必要ありませんが、小文字のアルファベット文字をすべて含める必要をなくすことで、この式を簡素化する優れた拡張機能でした。

TRANSLATE(CHAR_COLUMN,'',
      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-=+/\{}[];:.,<>? ')
于 2014-04-11T20:42:29.587 に答える
-1

IBM DB2バージョン9.5には、次のようにして、数字以外の文字をすべて削除/削除する方法がありますか?

SELECT replace(DATA、--正規表現の一種--、'')FROM TABLE_A

または他の方法?

いいえ。ユーザー定義関数を作成するか、ホストアプリケーションの言語で実装する必要があります。

于 2009-02-27T21:16:40.727 に答える
-1

以下のステートメントは、英数字以外の文字をすべての「string-value」から削除し、長さゼロの string-value が渡されたときに SQLSTATE メッセージ 42815 を防止します。

SELECT REPLACE(TRANSLATE(string-value || '|',
                        '||||||||||||||||||||||||||||||||',
                        '`¬!"£$%^&*()_-+={[}]:;@~#,<>.?/'''),'|','')
FROM SYSIBM.SYSDUMMY1;
于 2014-12-08T12:12:20.790 に答える