CREATE [OR REPLACE] FUNCTION '定义的函数名称'('参数名1' '参数类型','参数名2' '参数类型', ...) RETURN '返回值类型'
AS/IS
返回值形参 形参类型实例化;
变量1 变量类型;
BEGIN
方法体
(其中用到if判断的话,每一个if对应一个end if,出现几次if就会有几个end if;)
RETURN (接收过实参的)返回值形参
[EXCEPTION '异常处理部分']
END;
-- 创建表
create table city(
id integer,
code varchar2(50),
name varchar2(50)
);
--插入数据
insert into city values (1,'qingdao', '');
insert into city values (2,'beijing', '');
insert into city values (3,'shanghai', '');
insert into city values (4,'linyi', '');
-- drop table city;
语法:
decode(条件, 值1, 返回值1, 值2, 返回值2, … 值n, 返回值n, 缺省值)
该函数逻辑如下:
IF 条件=值1 THEN
RETURN(返回值1)
ELSIF 条件=值2 THEN
RETURN(返回值2)
......
ELSIF 条件=值n THEN
RETURN(返回值n)
ELSE
RETURN(缺省值)
END IF
例子
select t.id, t.code,
decode(t.code, 'qingdao', '青岛', 'beijing', '北京', 'shanghai', '上海', '不知名城市') as name
from city t;
-- 等同于
select t.id, t.code,
case t.code
when 'qingdao' then '青岛'
when 'beijing' then '北京'
when 'shanghai' then '上海'
else '不知名城市'
end as name
from city t;
--本月第一天
SELECT TRUNC(ADD_MONTHS(LAST_DAY(SYSDATE), -1) + 1) AS 本月第一天 FROM DUAL;
--下个月第一天
SELECT TRUNC(LAST_DAY(SYSDATE) + 1) AS 下个月第一天 FROM DUAL;
-- 本年第一天
SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL;
-- 本年最后一天
SELECT LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'Y'),11)) FROM DUAL
-- 语法:
SUBSTR(string, start, [length])
-- 语法:
INSTR(string,child_string,[start],[show_time])
-- start:可选项,开始位置,默认从1开始。如果为负数,则从右向左检索。
-- show_time:可选项,表示子字符串第几次出现在源字符串当中,默认第1次,负数则报错。
-- 查询字符串长度
select length(t.code) from city ;
-- 查询最大长度
select max(length(t.code)) from city;
-- 语法
replace(字段名,旧值, 新值)
--示例
update city set name = replace(name,'北京','首都') where name like '%北京%';
translate 函数是 replace 的超集
--语法:
translate(string, from_str, to_str);
-- from_str 查找字符
-- to_str 替换字符
-- 1. 字符一一对应,一一替换
select translate('13687657303', '123', 'abc') as n from dual;
-- ac687657c0c
-- 2. 查找字符没有对应的替换字符,将所有该查找字符去掉
select translate('13687657303', '123', 'ab') as n from dual;
-- a6876570
-- 3. 查找字符对应多个替换字符,以第一个对应替换字符为准
select translate('13687657303', '1233', 'abcd') as n from dual;
-- ac687657c0c
oracle函数中有不足位数补空格的函数,LPAD和RPAD分别是左补位和右补位
-- 语法,填充字符默认空格
lpad(字段名,总位数, 填充字符)
-- 例子,结果是00056,即补足五位
select lpad('56',5,'0') from dual
wm_concat函数实现行转列功能,即将查询出的某一列值使用逗号进行隔开拼接,成为一条数据。
select wm_concat(t.ename) names from city t;
-- 语法模式:
SELECT REGEXP_SUBSTR(string,
'[^特定字符]+',
1,
LEVEL,
'i') as 起个别名
FROM DUAL
CONNECT BY LEVEL <= LENGTHB(TRANSLATE(string, '特定字符' || string, '特定字符')) + 1;
-- 示例:
SELECT REGEXP_SUBSTR('1,2,3',
'[^,]+',
1,
LEVEL,
'i') as f
FROM DUAL
CONNECT BY LEVEL <= LENGTHB(TRANSLATE('1,2,3', ',' || '1,2,3', ',')) + 1;
语法:REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
i
不区分大小写进行检索;模式c
区分大小写进行检索。默认为c
。针对的是正则表达式里字符大小写的匹配