17

私が持っている文字が数字であるかどうかを確認する組み込みのDB2関数またはクエリはありますか? (ユーザー定義関数が使えない)

4

7 に答える 7

32

ドキュメント リンク

CASE
  WHEN LENGTH(RTRIM(TRANSLATE(test_str, '*', ' 0123456789'))) = 0 
  THEN 'All digits'
  ELSE 'No'
END
于 2012-05-07T21:58:01.043 に答える
5

db2 のバージョンが regexp_like を使用できる場合は、それを行うことができます。

「.」付きの番号 小数点記号として:

 select *      from yourtable                            
 where REGEXP_LIKE(trim(yourzone) , '^\d+(\.\d*)?$')

小数点記号として "," を使用する数値:

 select *      from yourtable                            
 where REGEXP_LIKE(trim(yourzone) , '^\d+(\,\d*)?$') 

小数点なしの数値 (整数のみ、お尋ねください)

 select *      from yourtable                  
 where REGEXP_LIKE(trim(yourzone) , '^\d+$')
于 2016-10-21T04:12:31.433 に答える
3

多くのアプローチがあります。2 つの関数のみを使用して、そのソリューションを見てみましょう。

CASE
    WHEN REPLACE(TRANSLATE(test_str, '0','123456789','0'),'0','') = ''
    THEN 'All digits'
    ELSE 'Not all digits'
END

一般的に-機能が少ない-パフォーマンスが向上します:)

于 2016-02-21T21:14:29.780 に答える
1

ASCII 関数を使用して文字値を取得し、それが 48 '0' と 57 '9' の間であることを比較します

アスキーテーブル

ASCII 関数 引数の左端の文字の ASCII コード値を整数として返します。

于 2012-05-07T22:00:43.977 に答える
0

xQbert による回答は完全に正しいわけではありません。実際に必要なのは fromString のすべての文字の * であり (スペースを削除する必要があります)、to 文字列の長さは元の文字列の長さと同じである必要があります。

したがって、次のようになります。

CASE
  WHEN LENGTH(RTRIM(TRANSLATE(test_str, '**********', '0123456789'))) = LENGTH(RTRIM(test_str)) 
  THEN 'All digits'
  ELSE 'No'
END
于 2015-12-03T07:19:57.797 に答える