天天看點

Transact-SQL如何進行字元串檢索備注參數傳回類型示例備注參數傳回類型

在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,如需轉載請自行聯系原作者