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