私が持っている文字が数字であるかどうかを確認する組み込みのDB2関数またはクエリはありますか? (ユーザー定義関数が使えない)
81678 次
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 に答える