Oracle中instr()函数用法
Oracle中instr()函数⽤法
⼤家可能平时不太关注Oracle中的函数⽅法,只记得常⽤的⼀些,今天谭谭就遇到了⼀个没⽤过的函数,在此记录⼀下
INSTR( string, substring [, start_position [, nth_appearance ] ] )
就是判断原字符串 string 是否包含⼦字符串 substring,并返回 substring所在的索引,Oracle索引是从1开始的,包含该⼦串时返回对应的索引位置,不包含则返回0。
有点类似Java中 String.contains() 是否包含的意思,当然String.contains() 返回的是Boolean值,包含返回true,不包含返回false.
具体含义如下:
string 原字符串,例如 tandashi
substring ⽬标字符串,⼀般是原字符串的⼦串,例如 a
start_position 可选的,在原字符串中的开始查找的位置,正数从左⾄右,负数从右⾄左,Oracle索引是从1开始的,
例如 3,就是从 tandashi 的第3位(字母n)从左⾄右开始查找⽬标字符串 a
例如 -2,就是从 tandashi 的倒数第2位(字母h)从右⾄左开始查找⽬标字符串 a
nth_appearance 可选的,⼦串第n次出现的索引位置。
索引位置
t a n d a s h i1 2 3 4 5 6 7 8
例⼦:
1 select instr('tandashi','a') from dual; --返回结果:2 默认第⼀次出现“a”的位置2 select instr('tandashi','da') from dual; --返回结果:4 即“da”第⼀次出现的位置
1 select instr('tandashi','a',2,2) from dual; --返回结果:5 --也就是说:在"tandashi"的第2位(字母a)开始,查找第⼆次出现的“a”的位置
2 select instr('tandashi','a',3,1) from dual; --返回结果:5 --也就是说:在"tandashi"的第3位(字母n)开始,查找第⼀次出现的“a”的位置
3 select instr('tandashi','a',-1,2) from dual; --返回结果:2 --也就是说:在"tandashi"的倒数第1位(字母i)开始,往回查找第⼆次出现的“a”的位置
4 select instr('tandashi','a',-4,1) from dual; --返回结果:5 --也就是说:在"tandashi"的倒数第4位(字母a)开始,往回查找第⼀次出现的“a”的位置
可这个函数有什么⽤处了,看起来没啥⽤,想想String.contains() 是如何使⽤的,判断是否包含某个字符串,所以在Oracle中也可以这么使⽤
select * from tableName where instr(name,'tandashi')>0; -- 从表tableName 中查找字段name 包含 “tandashi” 的数据作⽤等同于MySQL中的
select * from tableName where name like '%tandashi%';
⼤家可以在数据库中执⾏⼀下,实际操作体会⼀下。
oracle 常用字符串函数
oracle 常用字符串函数
Oracle是一种广泛使用的关系型数据库管理系统,它提供了许多强大的函数和工具来处理和管理数据。在Oracle中,字符串函数是最常用的函数之一,它们可以帮助我们处理和操作字符串数据。在本文中,我们将介绍一些常用的Oracle字符串函数。
1. SUBSTR函数
SUBSTR函数用于从字符串中提取子字符串。它的语法如下:
SUBSTR(string, start_position, [length])
其中,string是要提取子字符串的字符串,start_position是子字符串的起始位置,length是要提取的子字符串的长度(可选)。如果省略length,则将提取从start_position开始的所有字符。
例如,以下语句将从字符串“Hello World”中提取“World”:
SELECT SUBSTR('Hello World', 7) FROM dual;
输出结果为:“World”。
2. INSTR函数
INSTR函数用于查找字符串中某个子字符串的位置。它的语法如下:
INSTR(string, substring, [start_position], [nth_appearance])
其中,string是要查找的字符串,substring是要查找的子字符串,start_position是查找的起始位置(可选),nth_appearance是要查找的子字符串的第几个出现位置(可选,默认为1)。
例如,以下语句将查找字符串“Hello World”中第一个出现的字母“o”的位置:
SELECT INSTR('Hello World', 'o') FROM dual;
输出结果为:5。
3. CONCAT函数
CONCAT函数用于连接两个或多个字符串。它的语法如下:
CONCAT(string1, string2, ...)
其中,string1、string2等是要连接的字符串。
oracle sql 拆分字符串
oracle sql 拆分字符串
在进行数据库操作时,常常需要拆分字符串。Oracle SQL提供了一些内置的函数和方法可以实现字符串拆分操作。本文将介绍如何使用Oracle SQL拆分字符串。
一、使用SUBSTR函数和INSTR函数拆分字符串
SUBSTR函数用于截取指定位置和长度的字符串。INSTR函数用于返回某个字符串在另一个字符串中第一次出现的字符位置。结合使用这两个函数可以实现字符串的拆分。
语法:
SUBSTR(被拆分字符串, 开始位置, 截取长度)
INSTR(源字符串, 查找字符串, 开始位置, 第N次出现位置)
具体步骤:
1. 使用INSTR函数找到需要拆分的字符串的分隔符在字符串中的位置。
2. 使用SUBSTR函数截取需要拆分的字符串中分隔符前面的子串。
3. 循环执行步骤1和步骤2,直到所有子串被截取出来。
示例代码:
CREATE OR REPLACE FUNCTION SPLIT_STRING (STR VARCHAR2,
DELIMITER VARCHAR2)
RETURN SYS_REFCURSOR
IS
TYPE string_table_type IS TABLE OF VARCHAR2 (4000)
INDEX BY PLS_INTEGER;
result_set SYS_REFCURSOR;
string_list string_table_type;
delimiter_len NUMBER := LENGTH (DELIMITER);
last_delim NUMBER := 0;
BEGIN IF STR IS NULL
THEN
RETURN NULL;
END IF;
LOOP
EXIT WHEN last_delim = 0;
oracle sql分割函数 -回复
oracle sql分割函数 -回复
Oracle SQL分割函数
在Oracle数据库中,分割函数是一种非常有用的工具,可以将字符串按照特定规则拆分成多个部分。这些函数通常被用于处理包含有结构化数据的字符串,例如逗号分隔的值、固定长度的字段等。本文将详细介绍Oracle
SQL中的分割函数,包括如何使用它们以及使用示例。
一、SUBSTR函数
SUBSTR函数是Oracle SQL中最基本的分割函数之一。它用于从一个字符串中提取指定长度的子字符串。其基本语法如下:
SUBSTR(string, start_position, length)
其中,string是要进行分割的字符串,start_position是子字符串的起始位置,length是子字符串的长度。下面是一个使用SUBSTR函数的示例:
SELECT SUBSTR('Hello World', 7, 5) AS result
FROM dual;
这个查询将返回字符串"World"作为结果。因为子字符串的起始位置是7,而长度为5,所以函数从字符串的第7个字符开始,提取长度为5的子字符串。
二、INSTR函数
INSTR函数用于在一个字符串中查找一个子字符串,并返回子字符串在原字符串中的位置。其基本语法如下:
INSTR(string, substring, start_position, occurrence)
其中,string是要进行查找的字符串,substring是要查找的子字符串,start_position是开始查找的位置,occurrence是子字符串在原字符串中的次数。下面是一个使用INSTR函数的示例:
SELECT INSTR('Hello World', 'W', 1, 1) AS result
FROM dual;
这个查询将返回数字7作为结果。因为要查找的子字符串是"W",从位置1开始,它在原字符串中第一次出现的位置是7。
instr和like的效率(oracle)
instr和like的效率比较
测试环境 oracle10g,tcurrentbilllog表总数有近200万条
instr(‘源字符串’,’查询字符串’)>0 相当于 ‘源字符串’ like ’%查询字符串%’ =true
instr(‘源字符串’,’查询字符串’)=0 相当于 ‘源字符串’ like ’%查询字符串%’ =false
1.%a%方式:
select * from pub_yh_bm t where instr(t.chr_bmdm,'2')>0
等份于:
select * from pub_yh_bm t where t.chr_bmdm like '%2%'
2.%a方式:
select * from pub_yh_bm t
where instr(t.chr_bmdm,'110101')=length(t.chr_bmdm)-length('110101')+1
等份于:
select * from pub_yh_bm t where t.chr_bmdm like '%110101'
3.a%方式:
select * from pub_yh_bm t where instr(t.chr_bmdm,'11010101')=1
等份于:
select * from pub_yh_bm t where t.chr_bmdm like '11010101%'
全表查询
select * from tcurrentbilllog t where instr(t.callerno,'0301')>0;
用时:0.188秒
解释计划
SELECT STATEMENT, GOAL = ALL_ROWS 耗费=4187 基数=30833 字节=6659928
TABLE ACCESS FULL 对象所有者=ICD 对象名称=TCURRENTBILLLOG 耗费=4187 基数=30833 字节=6659928
Oracleinstr函数与SqlServercharindex的区别
Oracleinstr函数与SqlServercharindex的区别
INSTR(C1,C2[,I[,J]])
【功能】在⼀个字符串中搜索指定的字符,返回发现指定的字符的位置;
【说明】多字节符(汉字、全⾓符等),按1个字符计算
【参数】 C1 被搜索的字符串 C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 第J次出现的位置,默认为1
【返回】数值
【⽰例】
select instr('abcdefgc','c',1,2) from dual;
返回:8CHARINDEX(C1,C2[,I])
【功能】在⼀个字符串中搜索指定的字符,返回发现指定的字符的位置;
【说明】多字节符(汉字、全⾓符等),按1个字符计算
【参数】C1希望搜索的字符串 C2被搜索的字符串
I 搜索的开始位置,默认为1
【返回值】数值
【实例】
select charindex('c','abcdefgc',4)
返回:8
【总结】需要注意的地⽅是虽然INSTR和CHARINDEX函数实现的功能相同,但C1,C2表⽰的意思完全相反,⽽且INSTR的功能更强⼤,可以查找第J次出现的位置。
sql常用函数instr()和substr()
sql常⽤函数instr()和substr()
Decode
decode(条件,值1,翻译值1,值2,翻译值2,...,缺省值) 该函数与程序中的 If...else if...else 意义⼀样
NVL
格式:NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
注意事项:string1和replace_with必须为同⼀数据类型,除⾮显式的使⽤TO_CHAR函数进⾏类型转换。
select nvl(sum(t.dwxhl),1) from tb_jhde t 就表⽰如果sum(t.dwxhl) = NULL 就返回 1
在NVL函数的功能上扩展,提供了NVL2函数
NVL2
nvl2 (E1, E2, E3) 的功能为:如果E1为NULL,则函数返回E3,否则返回E2
结合
Decode 和 NVL等函数 常常结合使⽤,例如
select monthid,decode(nvl(sale,6000),6000,'NG','OK') from output
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1,
如果取较⼩值就是 select monthid,decode(sign(sale-6000),-1,sale,6000) from output,即达到取较⼩值的⽬的。
在Oracle中
可以使⽤instr函数对某个字符串进⾏判断,判断其是否含有指定的字符。
其语法为:instr(sourceString,destString,start,appearPosition). instr('源字符串' , '⽬标字符串' ,'开始位置','第⼏次出现')
其中sourceString代表源字符串;
destString代表想聪源字符串中查找的⼦串;
start代表查找的开始位置,该参数可选的,默认为1;
oracle截取字段中的部分字符串
oracle截取字段中的部分字符串
使⽤Oracle中Instr()和substr()函数:
在Oracle中可以使⽤instr函数对某个字符串进⾏判断,判断其是否含有指定的字符。
其语法为:instr(sourceString,destString,start,appearPosition). instr('源字符串' , '⽬标字符串' ,'开始位置','第⼏次出现')
其中sourceString代表源字符串;
destString代表想聪源字符串中查找的⼦串;
start代表查找的开始位置,该参数可选的,默认为1;
appearPosition代表想从源字符中查找出第⼏次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进⾏查找,但是位置数据仍然从左向右计算。
返回值为:查找到的字符串的位置。
对于instr函数,我们经常这样使⽤:从⼀个字符串中查找指定⼦串的位置。例如:SQL> select instr('yuechaotianyuechao','ao') position from dual;
POSITION
----------
6
从第7个字符开始搜索
SQL> select instr('yuechaotianyuechao','ao', 7) position from dual;
POSITION
----------
17
从第1个字符开始,搜索第2次出现⼦串的位置
SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual;
POSITION
----------
17
-------------------------------------------------------------
对于instr函数,我们经常这样使⽤:从⼀个字符串中查找指定⼦串的位置。例如:
oracle 函数的用法
oracle 函数的用法
Oracle 是一个非常强大的数据库管理系统,它提供了丰富的函数库,可以让我们在
SQL 语句中使用各种函数来实现数据处理、计算和查询。本文将给大家介绍一些常用的
Oracle 函数及其用法。
一、字符串函数
1. UPPER 函数:将字符串转换为大写字母。
SELECT UPPER('hello world!') FROM DUAL;
结果为:HELLO WORLD!
结果为:hello world!
3. INSTR 函数:查找子字符串在字符串中第一次出现的位置。
结果为:5
4. SUBSTR 函数:截取字符串的一部分。
5. REPLACE 函数:将字符串中的某个子串替换为另一个子串。
二、数值函数
1. ROUND 函数:将指定的数字四舍五入到指定的小数位数。
3. ABS 函数:计算数字的绝对值。
4. SIGN 函数:返回数字的符号,如果为正数返回 1,为负数返回 -1,为零返回 0。
SELECT SIGN(-10), SIGN(10), SIGN(0) FROM DUAL;
结果为:-1 1 0
5. POWER 函数:计算一个数的指定次幂。
三、日期函数
1. SYSDATE 函数:返回当前系统日期和时间。
SELECT SYSDATE FROM DUAL;
2. MONTHS_BETWEEN 函数:计算两个日期之间相差的月数。 SELECT MONTHS_BETWEEN('2022-01-01', '2021-01-01') FROM DUAL;
3. ADD_MONTHS 函数:对指定日期增加指定的月数。
4. TRUNC 函数:截取日期到指定的精度,例如截取到月份。
使用Oracle的instr函数与索引配合提高模糊查询的效率
使⽤Oracle的instr函数与索引配合提⾼模糊查询的效率
⼀般来说,在Oracle中,我们对tb表的name字段进⾏模糊查询会采⽤下⾯两种⽅式:
1.select * from tb where name like '%XX%';
2.select * from tb where instr(name,'XX')>0;
若是在name字段上没有加索引,两者效率差不多,基本没有区别。
为提⾼效率,我们在name字段上可以加上⾮唯⼀性索引:
create index idx_tb_name on tb(name);
这样,再使⽤
select * from tb where instr(name,'XX')>0;
这样的语句查询,效率可以提⾼不少,表数据量越⼤时两者差别越⼤。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序
的影响。
dbms_lob.instr的用法
dbms_lob.instr的用法
DBMS_LOB.INSTR是一个Oracle PL/SQL内置函数,用于在一个大型对象(LOB)中查找特定子字符串的位置。它对于需要处理BLOB、CLOB和NCLOB类型的文本和二进制数据的应用程序非常有用。
语法
DBMS_LOB.INSTR (
lob_loc IN BLOB | CLOB | NCLOB,
pattern IN CHAR | VARCHAR2 | CLOB | NCLOB,
offset IN INTEGER DEFAULT 1,
occurrence IN INTEGER DEFAULT 1
RETURN integer;
参数
- lob_loc:大型对象(LOB)类型的输入值。可以是BLOB、CLOB或NCLOB。
- pattern:搜索模式。它可以是CHAR、VARCHAR2、CLOB或NCLOB类型的输入。它是要查找的子字符串。
- offset:一个可选的整数值,从lob_loc的哪个位置开始查找。默认值是1。
- occurrence:一个可选的整数值,指定要查找的是第几个出现的模式,如果不指定,默认为1。
- RETURN:返回从偏移量offset开始的搜索模式的第occurrence次出现的起始位置。如果没找到匹配项,则返回0。
使用案例
以下是一些DBMS_LOB.INSTR函数的例子。
1. 查找一个串在CLOB中的位置:
DECLARE
src_string CLOB := 'This is a sample CLOB data.'; pattern_str VARCHAR2(25) := 'sample';
