在VB程式中可以用split函數檢索所需要的字元串,在Transact-SQL中可以用CHARINDEX 函數在指定字元串中檢索需要的字元串。
示例:
declare @s varchar(1000)
declare @t varchar(1000)
set @s='"GL","AAA","04/01/2008","001:02:37","0","C","CLOAM","CLOA","C","","A","D","0800-000-410104","0800-000-410100",240340,"000025","M-25-080204-08","090","M","4685.00","4660.00","M-DQ102-066","","","",""'
set @t='"CLOA"'
select LEFT(RIGHT(@S,LEN(@S)-CHARINDEX(@t,@S)+1),len(@t))
其中
select CHARINDEX(@t,@S)
語句檢索@t字元串在@s中第一次出現的位置。
注:以下内容來至SQL SERVER2005聯機叢書。在部落格中複制下來為了記憶而已。
CHARINDEX 和 PATINDEX 函數都傳回指定模式的開始位置。PATINDEX 可以使用通配符,而 CHARINDEX 不能。
這兩個函數都帶有兩個參數:
希望擷取其位置的模式。使用 PATINDEX,模式是可以包含通配符的文字字元串。使用 CHARINDEX,模式是不包含通配符的文字字元串。
字元串值表達式(通常為列名),SQL Server 2005 在其中搜尋指定的模式。
一、文法
如果 pattern 或 expression 為 NULL,則當資料庫的相容級别為 70 時,PATINDEX 将傳回 NULL;如果資料庫相容級别小于或等于 65,則僅當 pattern 和 expression 同時為 NULL 時,PATINDEX 才傳回 NULL。
PATINDEX 基于輸入的排序規則執行比較。若要以指定排序規則進行比較,則可以使用 COLLATE 将顯式排序規則應用于輸入值。
<dl></dl>
<dt>pattern</dt>
<dd></dd>
一個文字字元串。可以使用通配符,但 pattern 之前和之後必須有 % 字元(搜尋第一個或最後一個字元時除外)。pattern 是字元串資料類型類别的表達式。
<dl><dt></dt></dl>
expression
一個表達式,通常為要在其中搜尋指定模式的列,expression 為字元串資料類型類别。
如果 expression 的資料類型為 varchar(max) 或 nvarchar(max),則為 bigint,否則為 int。
以下示例查找模式 <code>ensure</code> 在 <code>Document</code> 表的 <code>DocumentSummary</code> 列的某一特定行中的開始位置。
如果未通過 WHERE 子句限制要搜尋的行,查詢将傳回表中的所有行,對在其中找到該模式的所有行報告非零值,對在其中未找到該模式的所有行報告零值。
以下示例使用通配符查找模式 <code>en_ure</code> 在 <code>Document</code> 表中 <code>DocumentSummary</code> 列的某一特定行中的開始位置,其中下劃線為代表任何字元的通配符。
如果沒有限制要搜尋的行,查詢将傳回表中的所有行,對在其中找到該模式的所有行報告非零值。
以下示例使用 <code>COLLATE</code> 函數顯式指定要搜尋的表達式的排序規則。
複制代碼
CHARINDEX ( expression1 ,expression2 [ , start_location ] )
如果 expression1 或 expression2 之一是 Unicode 資料類型(nvarchar 或 nchar)而另一個不是,則将另一個轉換為 Unicode 資料類型。CHARINDEX 不能與 text、ntext 和 image 資料類型一起使用。
如果 expression1 或 expression2 之一為 NULL,并且資料庫相容級别為 70 或更高,則 CHARINDEX 将傳回 NULL。如果資料庫相容級别為 65 或更低,則 CHARINDEX 将僅在 expression1 和 expression2 都為 NULL 時才傳回 NULL 值。
如果在 expression1 内找不到 expression2,則 CHARINDEX 傳回 0。
CHARINDEX 将根據輸入的排序規則執行比較操作。若要以指定排序規則進行比較,則可以使用 COLLATE 将顯式排序規則應用于輸入值。
expression1
一個表達式,其中包含要查找的字元的序列。expression1 是一個字元串資料類别的表達式。
expression2
一個表達式,通常是一個為指定序列搜尋的列。expression2 屬于字元串資料類别。
start_location
開始在 expression2 中搜尋 expression1 時的字元位置。如果 start_location 未被指定、是一個負數或零,則将從 expression2 的開頭開始搜尋。start_location 可以是 bigint 類型。
如果 expression2 的資料類型為 varchar(max)、nvarchar(max) 或 varbinary(max),則為 bigint,否則為 int。
本文轉自fengyp 51CTO部落格,原文連結:http://blog.51cto.com/fengyp/73343,如需轉載請自行聯系原作者