SQL 常见函数整理 _ CHARINDEX()

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); 
  1. 使用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
### 回答1: SQL Server的CHARINDEX函数是用来查找一个字符串中某个子字符串的位置的函数。它的语法如下: CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) 其中,expressionToFind是要查找的子字符串,expressionToSearch是要在其中查找的字符串,start_location是可选的,表示从哪个位置开始查找。如果找到了子字符串,则返回它在字符串中的位置,否则返回。 ### 回答2: SQL Server中的CHARINDEX函数是字符串函数之一。该函数返回字符串中要查找的字符或子字符串的位置,如果未找到,则返回零。 CHARINDEX函数的语法如下: CHARINDEX(要查找的字符串, 被查找的字符串, 开始查找的位置) 其中,第一个参数是要查找的字符串,第二个参数是被查找的字符串,第三个参数是可选的,表示从被查找的字符串的哪个位置开始查找。 CHARINDEX函数返回的是要查找的字符串在被查找的字符串中的起始位置。如果要查找的字符串在被查找的字符串中出现多次,则返回第一次出现的位置。 以下是使用CHARINDEX函数的示例: -- 查找字符串中的子字符串 SELECT CHARINDEX('world', 'hello world') -- 返回7 -- 查找子字符串在字符串中的位置 SELECT CHARINDEX('o', 'hello world', 5) -- 返回7 -- 如果未找到,则返回0 SELECT CHARINDEX('abc', 'hello world') -- 返回0 CHARINDEX函数可以被用于许多情况。例如,可以在数据库中使用它来查找表格中的某些特定字符或子字符串。此外,由于该函数的功能较强大,还可以在编写存储过程中使用它来检查特定字符串的存在并执行相应的操作。 总之,CHARINDEX函数SQL Server中的一个非常有用的函数,可以帮助开发人员在大多数情况下轻松地查找和处理特定字符串。 ### 回答3: SQL Server的CharIndex函数用于返回指定字符串在源字符串中的位置。如果查找到指定字符串,则返回该字符串的第一个字符在源字符串中的位置。如果未找到,则返回0。以下是CharIndex函数的语法: CHARINDEX(searchString, sourceString, startPosition) 参数说明: - searchString:要查找的字符串。 - sourceString:要查找的源字符串。 - startPosition:指定从源字符串的哪个位置开始查找。可选参数,默认值为1。 示例: SELECT CHARINDEX('o', 'hello world') -- 返回值为 5 以上示例中,CharIndex从“hello world”中查找第一个出现“o”的位置,返回5。 使用CharIndex函数时,需要注意以下几点: - CharIndex区分大小写。如果要忽略大小写,可以使用Upper或Lower函数将源字符串和待查找字符串转换为大写或小写。 - 查找到的位置是指从左到右的第几个字符。如果要从右到左进行查找,可以使用PATINDEX函数。 - 如果使用CharIndex函数查找多个字符串的位置,需要多次调用该函数。 总的来说,CharIndex函数SQL Server中一个非常有用的字符串函数,可以方便地进行字符串位置的查找和处理。在实际应用中,可以使用它来解析数据、替换字符串等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值