今天的博客主题
数据库篇 --》Oracle--》常用SQL汇总
分页SQL语句
SELECT
*
FROM
(
SELECT
TMP. ID,
ROWNUM AS ROW_ID
FROM
(SELECT CC. ID FROM MYTABLE CC) TMP
WHERE
20 >= ROWNUM
)
WHERE
ROW_ID > 0
默认排序
SELECT * FROM YL_LIBRARY A ORDER BY A.REPORT_TITLE;
拼音排序
SELECT * FROM USER A ORDER BY NLSSORT(A.USER_NAME, 'NLS_SORT=SCHINESE_PINYIN_M');
分组统计聚合
SELECT AGE,COUNT(AGE) FROM USERS GROUP BY AGE;
正则查询
匹配字段特殊字符
SELECT * FROM TEMP_COMPANY_1121_4226_YFGS WHERE REGEXP_LIKE(CN_NAME,'[[:punct:]]+');
-- ###################################
[[:alpha:]] 任何字母。[A-Za-z]
[[:digit:]] 任何数字。[0-9]
[[:alnum:]] 任何字母和数字。[A-Za-z0-9]
[:blank:] 标准是空格和TAB,但Oracle里只有空格!
[:cntrl:] CONTROL键
[:graph:] 即所有可见字符,不包括空格
[:print:] 可打印字符 ,即空格+所有可见字符
[[:space:]] 空白字符。
[[:punct:]] 任何标点符号。
[[:upper:]] 任何大写字母。[A-Z]
[[:lower:]] 任何小写字母。[a-z]
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
设置表主键自增
-- 创建一个序列
CREATE SEQUENCE TEMP_COMPANY_ID
MINVALUE 1 --最小值
NOMAXVALUE --不设置最大值
START WITH 1 --从1开始计数
INCREMENT BY 1 --每次加1
NOCYCLE --一直累加,不循环
NOCACHE;
-- 创建触发器。(insert语句不传ID)
CREATE OR REPLACE TRIGGER TEMP_COMPANY_INFO_1121_LKL
BEFORE INSERT ON TEMP_COMPANY_INFO_1121_LKL FOR EACH ROW WHEN (new.id is null)
begin
select TEMP_COMPANY_ID.nextval into:new.id from dual;
end;
按照分号;拆分字段为多行
SELECT
ID,
TRIM(REGEXP_SUBSTR(CN_NAME_ABBR, '[^;]+', 1, LEVEL)) CN_NAME_ABBR
FROM
TEMP_COMPANY_1121_4226_YFGS
CONNECT BY LEVEL <= REGEXP_COUNT(CN_NAME_ABBR, ';') + 1
AND ID = PRIOR ID
AND PRIOR dbms_random.value IS NOT NULL