天天看点

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,如需转载请自行联系原作者