1.有些狀況須要將幾條記錄按要求排序,適用於少許要求oracle
表如圖所示:函數
按照e,u,r,o,t,w,q,y,i順序排序:spa
1 SELECT 2 * 3 FROM 4 LGQ_TEST 5 ORDER BY 6 ( 7 CASE 8 9 WHEN s = 'e' THEN 10 1 11 WHEN S = 'u' THEN 12 2 13 WHEN S = 'r' THEN 14 3 15 WHEN S = 'o' THEN 16 4 17 WHEN S = 't' THEN 18 5 19 WHEN S = 'W' THEN 20 6 21 WHEN S = 'q' THEN 22 7 23 WHEN S = 'y' THEN 24 8 25 WHEN S = 'i' THEN 26 9 ELSE 0 27 END 28 )
2.遞歸查詢(遞歸子孫和遞歸祖先)code
1 -- 遞歸子孫 2 SELECT 3 pur.CODE 4 FROM 5 PUB_REGION pur START WITH pur.CODE = '370000000000' CONNECT BY PRIOR pur.CODE = pur.PARENT_CODE 6 7 -- 遞歸祖先 8 SELECT 9 pur.CODE 10 FROM 11 PUB_REGION pur START WITH pur.CODE = '370100000000' CONNECT BY PRIOR pur.PARENT_CODE=pur.CODE
3.異常:ORA-01747: user.table.column, table.column 或列說明無效regexp
由於用了oracle關鍵字blog
4.將用逗號隔開的字符串轉成in條件排序
SELECT regexp_substr( TO_CHAR( 'id1,id2,id3' ), '[^,]+', 1, LEVEL ) FROM dual CONNECT BY regexp_substr( TO_CHAR( 'id1,id2,id3' ), '[^,]+', 1, LEVEL ) IS NOT NULL
結果爲:遞歸
1 --使用 2 SELECT 3 * 4 FROM 5 TABLE 6 WHERE 7 TABLE.ID IN ( 8 SELECT 9 regexp_substr( TO_CHAR( 'id1,id2,id3' ), '[^,]+', 1, LEVEL ) 10 FROM 11 dual CONNECT BY regexp_substr( TO_CHAR( 'id1,id2,id3' ), '[^,]+', 1, LEVEL ) IS NOT NULL)
5.用自定義符號鏈接表中某字段,函數LISTAGG()字符串
這個例子是吧這個表中全部記錄的id用--鏈接起來table
1 SELECT 2 LISTAGG(PI.ID,'--') WITHIN GROUP(ORDER BY PI.ID DESC) AS STR 3 FROM 4 PROJECT_INFO PI 5 WHERE 6 1=1
結果爲: