6

こんにちは、以下のテーブルテストがあります

NAME
---------
abc1234
XYZ12789
a12X8b78Y9c5Z

文字列内の数字と文字の数を次のように調べようとします

select name,length(replace(translate(lower(name),'abcdefghijklmnopqrstuvwxyz',' '),'      ','')) as num_count,
length(replace(translate(name,'1234567890',' '),' ','')) as char_count
from test6;

その実行はうまくいき、出力が得られます

NAME    NUM_COUNT   CHAR_COUNT
abc1234         4       3
XYZ12789        5       3
a12X8b78Y9c5Z   7       6

しかし、私の質問は、手動でabcdefghijklmnopqrstuvwxyz andを指定しないことによるオプションがあります1234567890

4

2 に答える 2

10

@alfasinの回答は良いですが、11gを使用している場合はより簡単になります:

select name,
REGEXP_count(name,'\d') as num_count,
REGEXP_count(name,'[a-zA-Z]') as char_count,
from test6;
于 2012-07-08T12:00:04.070 に答える
5

Oracle PLSQLを使用していることを正しく理解している場合、私の知る限り、文字列の桁数/文字数をカウントする「組み込み」メソッド(PLSQL内)はありません。

ただし、次のようにして文字数をカウントできます。
select LENGTH(REGEXP_REPLACE('abcd12345','[0-9]')) from dual

および数字:
select LENGTH(REGEXP_REPLACE('abcd12345','[a-zA-Z]')) from dual

または、あなたの場合:

select name,
LENGTH(REGEXP_REPLACE(name,'[a-zA-Z]','')) as num_count,
LENGTH(REGEXP_REPLACE(name,'[0-9]','')) as char_count,
from test6;

Bill the Lizard の場合:
私の回答は Oracle 11g でテストされ、問題なく動作します。
私の回答を再度削除することにした場合は、その理由を説明するコメントを追加してください。私もチャットルームであなたを探していました...

于 2012-07-08T04:52:44.947 に答える