Oracle常见函数的部分解释与示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuliqi0429/article/details/47188275
--Oracle 的常见函数的使用与部分示例:

--Oracle数据库内置函数
--lpad()函数用于补全字符串,在某些情况下,预期的字符串为固定长度,而且格式统一。如果源数据超过格式长度将进行截取,从前面开始截取格式长度。
select lpad('21',6,'0') from dual;
--rpad()函数与lpad()类似,只是在右边补全。
select rpad('21',6,'0') from dual;
--lower()函数,返回小写的字符串。
select lower('Ajax') from dual;
--upper()函数,返回大写的字符串。
select upper('Ajax') from dual;
--initcap()函数,单词首字母大写。
select initcap('big BOOM') from dual;
--length()函数,返回字符串长度。
select length('Ajax') from dual;
--substr()函数,截取字符串。
select substr('Ajax',2,2) from dual;
--instr()函数,获取字符串出现的位置。参数1:源字符串;参数2:查找的字符串;参数3:查找的起始位置(可不填);参数4:返回第几次查询位置(可不填),未查到返回0
select instr('Ajax is a JavaScrpt Function','a',2,2)  from dual;
--ltrim()函数,删除字符串首部空格
select ltrim('     Ajax    is   a    Function    ') from dual;
--rtrim()函数,删除字符串尾部空格
select rtrim('     Ajax    is   a    Function    ') from dual;
--trim()函数,删除字符串首尾空格
select trim('     Ajax    is   a    Function    ') from dual;
--to_char()函数,将其他类型转换为字符串类型
select to_char(20.96,'fml000.000') from dual;
select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') from dual;
--translate()函数,用于替换字符串,类似于翻译的过程
select translate('56338','1234567890','avlihemoqr') from dual;
--abs()函数,返回数字的绝对值
select abs(22),abs(-22) from dual;
--round()函数,返回数字的四舍五入的值
select round(5.5),round(5.4) from dual;
--ceil()函数,返回上取整的值
select ceil(5.5),ceil(5.4) from dual;
--floor()函数,返回下取整的值
select floor(5.5),floor(5.4) from dual;
--mod()函数,取模操作
select mod(5,4) from dual;
--sign()函数,返回数值的正负性
select sign(-5),sign(5),sign(0) from dual;
--sqrt()函数,返回数字的平方根
select sqrt(9) from dual;
--power()函数,乘方运算
select power(3,2) from dual;
--trunc()函数,截取数字
select trunc(123456.789,2) from dual;
--vsize()函数,返回数据的存储空间
select vsize('测试1'),vsize('测试a') from dual;
--to_number()函数,将字符串转换为数字格式
select to_number('123456.789') from dual;
--to_date()函数,将字符串转换为日期格式
select to_date('2015-07-13','YYYY-MM-DD') from dual;
--add_months()函数,为日期加上特定的月份
select add_months(sysdate,2) from dual;
--last_day()函数,返回特定日期所在月份的最后一天
select last_day(sysdate) from dual;
--months_between()函数,返回两个日期所差的月数
select months_between(to_date('2016-01-01','YYYY-MM-DD'),sysdate) from dual;
--current_date()函数,返回当前回话时区的当前日期
select current_date from dual;
--current_timestamp()函数,返回当前会话时区的当前时间戳
select current_timestamp from dual;
--extract()函数,返回日期的某个域
select extract(year from sysdate),extract(month from sysdate),extract(day from sysdate),
extract(hour from systimestamp)+8,extract(minute from systimestamp) from dual;
--Oracle数据库的聚合函数
--max()获取最大值,min()获取最小值,avg()获取平均值,sum()求和,count()求总个数
--decode()函数,多值判断(判定条件,情况1,返回值1,情况2,返回2......);
--nvl()处理空值
select nvl('','空值') from dual;
--cast()函数,强制转换数据类型
--常用的正则匹配标示
--[[:alpha:]] 任何字母。 
--[[:digit:]] 任何数字。 
--[[:alnum:]] 任何字母和数字。 
--[[:space:]] 任何白字符。 
--[[:upper:]] 任何大写字母。 
--[[:lower:]] 任何小写字母。 
--[[unct:]] 任何标点符号。 
--[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。 
--'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。 
--'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或'\r'。 
--'.' 匹配除换行符 \n之外的任何单字符。 
--'?' 匹配前面的子表达式零次或一次。 
--'*' 匹配前面的子表达式零次或多次。 
--'+' 匹配前面的子表达式一次或多次。 
--'( )' 标记一个子表达式的开始和结束位置。 
--'[]' 标记一个中括号表达式。 
--'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。 
--'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。 
--\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 
--REGEXP_LIKE 
select * from test where regexp_like(mc,'^a{1,3}'); 
select * from test where regexp_like(mc,'a{1,3}'); 
select * from test where regexp_like(mc,'^a.*e$'); 
select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]'); 
select * from test where regexp_like(mc,'^[[:lower:]]'); 
Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]'); 
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]'); 
--REGEXP_INSTR 
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test; 
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test; 
Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL; 
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL; 
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL; 
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL; 
--REGEXP_SUBSTR 
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test; 
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test; 
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL; 
--REGEXP_REPLACE 
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual; 
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual; 


--另附几个不常见但是又可能用到的几个函数
--给结果加上一个行号
row_number()over(partition by '分组字段' order order by '排序字段' desc) 
--给结果加行号但是如果排序字段一样则增加行号一致,而下一个的数值是跳跃的,如 前三个都是1的话,那么第四个是4
rank()over(partition by '分组字段' order order by '排序字段' desc) 
--给结果加行号但是如果排序字段一样则增加行号一致,而下一个的数值是连续的,如 前三个都是1的话,那么第四个是2
dense_rank()over(partition by '分组字段' order order by '排序字段' desc) 

猜你喜欢

转载自blog.csdn.net/yuliqi0429/article/details/47188275