CHARINDEX (Transact-SQL)

本文详细介绍了 SQL Server 中的 CHARINDEX 函数,包括其语法、参数说明、返回类型及注意事项,并通过多个实例展示了如何在不同场景下使用此函数进行字符串定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

expression2 中搜索 expression1 并返回其起始位置(如果找到)。搜索的起始位置为 start_location

Topic link icon Transact-SQL 语法约定

CHARINDEX ( expression1 ,expression2 [ , start_location ] )
expression1

包含要查找的序列的字符表达式expression1 最大长度限制为 8000 个字符。

expression2

要搜索的字符表达式。

start_location

表示搜索起始位置的整数或 bigint 表达式。如果未指定 start_location,或者 start_location 为负数或 0,则将从 expression2 的开头开始搜索。

如果 expression2 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint,否则为 int

如果 expression1 expression2 之一是 Unicode 数据类型(nvarcharnchar)而另一个不是,则将另一个转换为 Unicode 数据类型。CHARINDEX 不能与 image 数据类型一起使用。

如果 expression1 expression2 之一为 NULL,并且数据库兼容级别为 70 或更高,则 CHARINDEX 将返回 NULL。如果数据库兼容级别为 65 或更低,则 CHARINDEX 将仅在 expression1expression2 都为 NULL 时才返回 NULL 值。

如果在 expression2 内找不到 expression1,则 CHARINDEX 返回 0。

CHARINDEX 将根据输入的排序规则执行比较操作。若要以指定排序规则进行比较,则可以使用 COLLATE 将显式排序规则应用于输入值。

返回的开始位置从 1 开始,而非从 0 开始。

以下示例返回字符序列 bicycleDocument 表的 DocumentSummary 列中开始的位置。

DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('bicycle', @document)
GO

下面是结果集:

-----------
48         

以下示例将使用可选的 start_location 参数从 DocumentSummary 列的第五个字符开始查找 vital

DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('vital', @document, 5)
GO

下面是结果集:

-----------
16         

(1 row(s) affected)

以下示例显示了在 expression2 内找不到 expression1 时的结果集。

DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('bike', @document)
GO

下面是结果集:

-----------
0         

(1 row(s) affected)

下面的示例在 'Das jst ein Test' 中执行区分大小写的字符串 'TEST' 搜索。

USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS)

下面是结果集:

-----------
0         

下面的示例在 'Das jst ein Test' 中执行区分大小写的字符串 'Test' 搜索。

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS)

下面是结果集:

-----------
13         

下面的示例在 'Das jst ein Test' 中执行不区分大小写的字符串 'TEST' 搜索。

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

下面是结果集:

-----------
13       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值