ORACLE数据库中函数instr和SQLServer数据库中CHARINDEX函数

本文详细介绍了如何在SQLServer中替代Oracle的instr函数,通过使用CHARINDEX函数实现相同的功能,并提供了具体的使用示例。同时,也回顾了Oracle中instr函数的使用方式及特点,帮助开发者在产品移植过程中顺利过渡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好东西分享给大家



公司产品后台一直都是基于oracle数据库的,但是最近有些项目中需要使用SQLServer作为后台数据库,在做产品移植时,发现产品移植到SQLServer后问题很多,大部分都是由于oracle和SQLServer中内部函数不通用所致,比如:产品中使用ORACLE中的instr函数在SQLServer中不存在,因此报出如下异常:

org.apache.jasper.JasperException: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select count(id) as nums from orgunitlink  where oid='null' and instr(col1,'402881e70ad1d990010ad1e5ec930008')>0]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 'instr' 不是可以识别的内置函数名称。
 

     因此查阅相关资料,发现SQLServer中的CHARINDEX函数功能与ORACLE中instr功能相似。

     2者使用说明如下:

1)SQLServer中的CHARINDEX

       CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:
       CHARINDEX ( expression1 , expression2 [ , start_location ] )

       Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

       CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:

      CHARINDEX('SQL', 'Microsoft SQL Server')

      这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
      接下来,我们看这个CHARINDEX命令:

      CHARINDEX('7.0', 'Microsoft SQL Server 2000')

      在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。

2)ORACLE中的instr

INSTR方法的格式为
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) 例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的显示结果是 Instring 14 在项目中用到了Oracle中 Instr 这个函数,顺便仔细的再次学习了一下这个知识。 Oracle中,可以使用 Instr 函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
Instr(string, substring, position, occurrence)
其中 string:代表源字符串; substring:代表想聪源字符串中查找的子串; position:代表查找的开始位置,该参数可选的,默认为 1; occurrence:代表想从源字符中查找出第几次出现的substring,该参数也是可选的,默认为1;
如果 position 的值为负数,那么代表从右往左进行查找。
返回值为:查找到的字符串的位置。对于 Instr 函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如: SELECT Instr('Hello Word', 'o', -1, 1) "String" FROM Dual 的显示结果是 Instring 8


http://www.hzhike.com/School/2011/201106/20110622195524.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值