1. 用法
用于查找一个字符串在另一个字符串中第一次出现的位置(索引)。它返回一个整数值表示第一次出现的位置。
2. 基本语法
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
参数说明:
expressionToFind:必需,要查找的字符串。
expressionToSearch:必需,要进行查找的字符串表达式。
start_location:可选,指定搜索的起始位置,默认为1。如果指定了起始位置,则从该位置开始搜索。
3. 应用示例
1.返回表达式的起始位置
declare @sql varchar(50)
select @sql = '摇摇晃晃的人间'
select charindex('晃',@sql)
----返回结果:3
2.从指定位置搜索
declare @sql varchar(50)
select @sql = '鱼翅与花椒'+'你的舌苔或空空荡荡'
select charindex('或',@sql,3)
----返回结果:10
----需要注意的是,虽然从第三位开始搜索,但是位置还是从1开始计算的
3.搜索不存在的表达式
declare @sql varchar(50)
select @sql = '鱼翅与花椒'+'你的舌苔或空空荡荡'
select charindex('飘',@sql,3)
----返回结果:0
4.执行区分大小写的搜索
select charindex('TEST','This is a Test'COLLATE Latin1_General_CS_AS)
----返回结果:0
select charindex('Test','This is a Test'COLLATE Latin1_General_CS_AS)
----返回结果:11
5.执行不区分大小写的搜索
SELECT CHARINDEX ( 'TEST',
'This is a Test'
COLLATE Latin1_General_CI_AS);
- 使用charindex 函数进行分列
--建表
--StudentInfo 记录学生所选选修课,已知一名学生不能选超过3门选修课。
if object_id('StudentInfo','U') IS NOT NULL DROP TABLE StudentInfo
go
create table StudentInfo(
StudentID int
,StudentName varchar(20)
,Course varchar(200)
)
go
insert into StudentInfo
values
(1,'Emma','拉丁,排球')
,(2,'Alex','围棋,街舞,曲棍球')
,(3,'Joe','演讲,乒乓球')
,(4,'Lily','太极')
,(5,'Zoe','击剑,跆拳道,街舞')
,(6,'Miya','法语')
go
--查询
select StudentID,StudentName,Course
,case when charindex(',',Course ,1 ) = 0 then Course else substring(Course,1 ,charindex(',',Course ,1 )-1) end as 选修课1
,case when charindex(',',Course ,1 ) = 0 then null
when charindex(',',Course,charindex(',',Course,1)+1) = 0 then substring(Course,charindex(',',Course,1) +1 ,len(Course))
else substring(Course,charindex(',',Course,1) +1 ,charindex(',',Course,charindex(',',Course,1)+1)-1 - charindex(',',Course,1))
end as 选修课2
,case when charindex(',',Course ,1 ) = 0 then null
when charindex(',',Course,charindex(',',Course,1)+1) = 0 then null
when charindex(',',Course,charindex(',',Course,charindex(',',Course,1))+1) = 0
then substring(Course,charindex(',',Course,charindex(',',Course,1)+1) +1 ,len(Course))
else substring(Course,charindex(',',Course,charindex(',',Course,1)+ 1 ) +1 ,len(Course) - charindex(',',Course,charindex(',',Course,1 ) +1))
end as 选修课3
from StudentInfo