我已經經歷了許多問題,並且找不到我正在查找的內容。 假設我有一個表,如下所示:在Oracle SQL中計算逗號分隔的所有列的值
Col1 Col2 Col3
1,2,3 2,3,4,5,1 5,6
我需要得到結果使用SELECT語句如下:
Col1 Col2 Col3
1,2,3 2,3,4,5,1 5,6
3 5 2
注意添加第三列是逗號的數分隔值。 查找單列的計數很簡單,但這似乎很難,如果不是不可能的話。 在此先感謝。
我已經經歷了許多問題,並且找不到我正在查找的內容。 假設我有一個表,如下所示:在Oracle SQL中計算逗號分隔的所有列的值
Col1 Col2 Col3
1,2,3 2,3,4,5,1 5,6
我需要得到結果使用SELECT語句如下:
Col1 Col2 Col3
1,2,3 2,3,4,5,1 5,6
3 5 2
注意添加第三列是逗號的數分隔值。 查找單列的計數很簡單,但這似乎很難,如果不是不可能的話。 在此先感謝。
尋找單個列計數很簡單,但是這似乎很難,如果不是不可能的。
所以你不要手動查找每一列?你想要它動態。
設計實際上有缺陷,因爲它違反了標準化。但是如果您願意繼續使用它,那麼您可以使用REGEXP_COUNT以PL/SQL的方式執行此操作。
喜歡的東西,
SQL> CREATE TABLE t AS
2 SELECT '1,2,3' Col1,
3 '2,3,4,5,1' Col2,
4 '5,6' Col3
5 FROM dual;
Table created.
SQL>
SQL> DECLARE
2 cnt NUMBER;
3 BEGIN
4 FOR i IN
5 (SELECT column_name FROM user_tab_columns WHERE table_name='T'
6 )
7 LOOP
8 EXECUTE IMMEDIATE 'select regexp_count('||i.column_name||', '','') + 1 from t' INTO cnt;
9 dbms_output.put_line(i.column_name||' has cnt ='||cnt);
10 END LOOP;
11 END;
12/
COL3 has cnt =2
COL2 has cnt =5
COL1 has cnt =3
PL/SQL procedure successfully completed.
SQL>
也許,還會有SQL本身XML的解決方案,而無需使用PL/SQL。
在SQL -
SQL> WITH DATA AS
2 (SELECT '1,2,3' Col1, '2,3,4,5,1' Col2, '5,6' Col3 FROM dual
3 )
4 SELECT regexp_count(col1, ',') + 1 cnt1,
5 regexp_count(col2, ',') + 1 cnt2,
6 regexp_count(col3, ',') + 1 cnt3
7 FROM t;
CNT1 CNT2 CNT3
---------- ---------- ----------
3 5 2
SQL>
每Count the number of elements in a comma separated string in Oracle一個簡單的方法做,這是count the number of commas然後加1
你只需要結果被聯合到的原始數據。那麼,這樣做:
SQL> with the_data (col1, col2, col3) as (
2 select '1,2,3', '2,3,4,5,1', '5,6' from dual
3 )
4 select a.*
5 from the_data a
6 union all
7 select to_char(regexp_count(col1, ',') + 1)
8 , to_char(regexp_count(col2, ',') + 1)
9 , to_char(regexp_count(col3, ',') + 1)
10 from the_data;
COL1 COL2 COL
----- --------- ---
1,2,3 2,3,4,5,1 5,6
3 5 2
您需要將結果轉換爲字符,因爲你unioning一個字符爲數字,甲骨文會抱怨。
值得注意的是,以這種方式存儲數據違反了第一範式。這使得操作困難得多,幾乎不可能限制正確。值得考慮的是規範化你的數據模型,以使其和其他查詢更簡單。
啊! @Ben,這一次我很快......大聲笑;-)我離開了'工會'位OP找出。 –
不要在列中存儲像逗號分隔值這樣的數據,它只會導致問題...順便說一句,你已經添加了一行,而不是一列。 – jarlh
'mysql'或'oracle'那些是兩個非常不同的DBMS。 @jarlh:我認爲你的評論的答案是「我沒有這樣設計,我只需要處理它」。因爲沒有人創建這樣的設計實際上必須使用它。 –
是@jarlh,我還能如何獲取多列的計數值。我發現在答案[這裏](http://stackoverflow.com/questions/27901978/count-comma-separated-values-of-all-columns-in-oracle-sql)如何做一列。但是我有多個列,我不想寫多個查詢。 –