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中,字符串函数是最常用的函数之一,它们可以帮助我们处理和操作字符串数据。在本文中,我们将介绍一些常用的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提供了一些内置的函数和方法可以实现字符串拆分操作。本文将介绍如何使用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 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的效率(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的区别

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()

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';

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档