ORACLE數據庫中函數instr和SQLServer數據庫中CHARINDEX函數

好東西分享給大家



公司產品後臺一直都是基於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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章