SELECT*FROM (SELECT rownumber() OVER (ORDERBY critter) as ROWID, a.*FROM zoo a) WHERE ROWID BETWEEN11AND20
串接 Group 後的欄位
DB2
1
SELECT category, LISTAGG(id, ', ') as ids FROM myTable GROUPBY category;
取得當前的日期
DB2
1 2 3 4 5
SELECT VARCHAR_FORMAT(CURRENT_DATE, 'YYYYMMDD') FROM SYSIBM.SYSDUMMY1; SELECT VARCHAR_FORMAT(CURRENT_DATE, 'YYYYMMDD') FROM mytable; --或是 SELECTdate(currenttimestamp) FROM SYSIBM.SYSDUMMY1; SELECTdate(currenttimestamp) FROM mytable;
取得當前的日期和時間
DB2
1
SELECT VARCHAR_FORMAT(CURRENTTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') FROM SYSIBM.SYSDUMMY1;
取得去年的日期
DB2
1
SELECT VARCHAR_FORMAT(CURRENT_DATE-1YEAR, 'YYYYMMDD') FROM SYSIBM.SYSDUMMY1;
查詢欄位值為純數字
DB2
1
SELECT*FROM mytable WHERE REGEXP_LIKE(mycolumn, '^[0-9]+$')
找出在 table1 中但不在 table2 中的記錄
使用 EXCEPT 運算子
1 2 3
SELECT*FROM table1 EXCEPT SELECT*FROM table2;
使用 NOT EXISTS
1 2 3 4 5 6 7
SELECT* FROM table1 t1 WHERENOTEXISTS ( SELECT1 FROM table2 t2 WHERE t1.key_column = t2.key_column );
找出重複的截取值
例如找出前8碼重複資料
1 2 3 4 5 6 7 8 9
SELECT* FROM users WHERE substr(idn, 1, 8) IN ( SELECT substr(idn, 1, 8) FROM users GROUPBY substr(idn, 1, 8) HAVINGCOUNT(*) >1 ) ORDERBY idn;
如果該欄位有index,可改用 EXISTS 和 LIKE 找出重複的記錄
1 2 3 4 5 6 7 8 9
SELECT* FROM users u1 WHEREEXISTS ( SELECT1 FROM users u2 WHERE u2.idn LIKE CONCAT(substr(u1.idn, 1, 8), '%') AND u2.idn != u1.idn -- 排除自己 ) ORDERBY idn
如果該欄位有index,且長度固定,為純數字
1 2 3 4 5 6 7 8 9 10
SELECT* FROM users u1 WHEREEXISTS ( SELECT1 FROM users u2 WHERE u2.idn <> u1.idn -- 排除自己 AND u2.idn >= CONCAT(LEFT(u1.idn, 8), '00000000') AND u2.idn <= CONCAT(LEFT(u1.idn, 8), '99999999') ) ORDERBY idn
修改資料
插入不存在的記錄
1 2 3 4 5 6
INSERTINTO target_table (id, name, status, created_date) SELECT ?, ?, ?, CURRENT_TIMESTAMP FROM SYSIBM.SYSDUMMY1 WHERENOTEXISTS ( SELECT1FROM target_table WHERE id = ? );
使用暫存表處理大量筆數更新
1 2 3 4 5 6 7 8 9 10 11 12 13
-- 1. 建立暫存表存放 id 清單 CREATETABLE temp_id_list (id VARCHAR(50));