常用oracle字符串函数:
查找字符串匹配,返回匹配开始索引
instr(源字符串, 目标字符串, 起始位置, 匹配序号):
源字符串 :没啥好说的
目标字符串 :需要匹配的字符串
起始位置 :源字符串的开始匹配索引,从1开始
匹配序号 :因为这个函数返回匹配的起始索引,所以如果有多个匹配,则用此确定返回第几个匹配的起始索引
截取并返回子字符串
substr(源字符串,起始位置,截取位数)
参数顾名思义
--------------------------------------数值函数------------------------------------------
--1、取一个数的大,小整数用floor()和ceil()
select floor(123.45) as "取123.45的小整数",ceil(123.45) as "取123.45的大整数" from
dual
--结果:取123.45的小整数 取123.45的大整数
--
123 124
--2、数值的截取和去小数位,
--两个数中任意一个转换为浮点数后,整型的就会转换为浮点数再进行运算
select
cast(165*100 as float)/347 from dual
select (40*100.0)/(123*1.0) 原数值,substr((40*100.0)/(123*1.0),5,2)
截取值,ROUND((40*100.0)/(123*1.0),1)固定小数位值 from
dual;
--结果:原数值 截取值 固定小数位值
--
32.520325203252 20 32.5
--3、如何分别取一个小数的整数部分和小数部分呀,比如19.1657589,取出来整数为19,小数为1657589?sql中截取固定小数位、整数部分、小数部分:
select
cast(19.1657589 as decimal(6,3)) 固定小数位,cast(19.1657589 as int)
整数部分,19.1657589-cast(19.031 as int) 小数部分 from dual;
-- 结果:
固定小数位 整数部分 小数部分
19.166
19 0.1657589
--4、可以使用substr()和instr()截取字段,在sql中使用CHARINDEX函数或LEFT或RIGHT函数,在oracle中没有
select
substr('张三:一班:男',instr('张三:一班:男',':',1,1)+1,2) as 班级,instr('张三:一班:男',':',1,1)+1
开始位置 from dual
--结果: 班级 开始位置
-- 一班 4
oracle正则表达式:
从10G开始支持
内置了四个函数
REGEXP_LIKE REGEXP_INSTR REGEXP_SUBSTR REGEXP_REPLACE
顾名思义,没啥好讲的
跟java正则表达式的区别主要在字符簇上,oracle如此表示:
字符簇: [[:alpha:]] 任何字母。 [[:digit:]] 任何数字。 [[:alnum:]] 任何字母和数字。 [[:space:]] 任何白字符。 [[:upper:]] 任何大写字母。 [[:lower:]] 任何小写字母。 [[unct:]] 任何标点符号。 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。