2011-01-27 11 views
5

私はdata_columnという名前の列を持っています。 "123123,12,123123"のような値を持っています。私は2番目の行でグループ化された行を数えたいと思う。regexp_substrを与えるクエリでselectグループを作ることはできますか?

しかし、私は

select count(*) from table group by regexp_substr(data_column,'[^,]+',1,2); 

を実行したときには

ORA-00932を与える:incostintentデータ型:予想: - 得た:CLOB 00932. 00000 - "矛盾データ型:期待%sは%sになりました"

正規表現の部分文字列を使用していますか?

答えて

2

問題がregexp_substr機能からではなく、自分の列のデータ型から来ていない:

SQL> CREATE TABLE t (data_column CLOB); 

Table created 
SQL> INSERT INTO t VALUES ('123123,12,123123'); 

1 row inserted 
SQL> INSERT INTO t VALUES ('123124,12,123123'); 

1 row inserted 
SQL> INSERT INTO t VALUES ('123125,11,123123'); 

1 row inserted 

SQL> SELECT regexp_substr(data_column,'[^,]+',1,2) FROM t; 

REGEXP_SUBSTR(DATA_COLUMN,'[^, 
-------------------------------------------------------------------------------- 
12 
12 
11 

ここでは、しかし(10.2でテスト)Oracleは、あなたがすることはできませんが、機能が正しく動作することを見ますCLOB列を持つグループ:

SQL> select count(*) from t group by data_column; 

select count(*) from t group by data_column 

ORA-00932: inconsistent datatypes: expected - got CLOB 

あなたは、GROUP BYを実行するためにVARCHAR2に関数の出力を変換することができます:

​​
関連する問題