分享兩條SQL語句
1,Oracle的SQL支援的REGEXP_REPLACE
SQL> select regexp_replace('fuck you','(.)(.)','/2/1') from dual;
REGEXP_REPLACE('FUCKYOU','(.)(
------------------------------
ufkcy uo
(呵呵)
字母兩個兩個一對,全倒過來了
/////////////////////////////////////////////////////////////////////////////
SQL> select regexp_replace('fuck you','(.)(.)','/2/3') from dual;
REGEXP_REPLACE('FUCKYOU','(.)(
------------------------------
ukyu
剔除了所有奇數位置上的字元,只留下偶數位置的字元,空格是奇數位置的字元
2,使用SQL語句類比二維矩陣
思路:首先用Cross Join構造出一個完全二維表,然後進行排序,分組
用到的表:EMP表,至少有三個欄位,DEPTNO,JOB,SAL
DEPTNO,JOB構成聯合主鍵,SAL的值由DEPTNO和JOB兩個欄位所決定,SAL的值有可能是NULL,要求:當SAL值為空白時,顯示0
SELECT A.DEPTNO,B.JOB,
(
CASE
WHEN EXISTS (SELECT * FROM EMP WHERE DEPTNO=A.DEPTNO AND JOB=B.JOB) THEN
(
SELECT SUM(SAL)
FROM EMP
WHERE DEPTNO=A.DEPTNO AND JOB=B.JOB
GROUP BY DEPTNO,JOB
)
ELSE 0
END
) SUM_SAL
FROM
(
SELECT DISTINCT DEPTNO
FROM EMP
) A
CROSS JOIN
(
SELECT DISTINCT JOB
FROM EMP
) B
GROUP BY A.DEPTNO,B.JOB
ORDER BY A.DEPTNO,B.JOB