SQL Server 中查找子串在字符串中的位置的函数PATINDEX()和CHARINDEX()

前言:

对于SQL Server中查找字符串的子串这个问题,许多人都习惯使用like,没错,但是如果出现下面情况:
查找一个表中的列中的数据是否是另一个表中一个列的数据的子串,这时由于两个列都是变量名,就无法使用like来做模糊匹配。就需要使用以下两个函数。
SQL Server中函数PATINDEX()和CHARINDEX()都是可以在一段字符串中查找子字符串位置的函数。

主要区别:是PATINDEX()支持通配符来查找,CHARINDEX()不支持通配符查找。

一、语法:

1、PATINDEX()语法格式:PATINDEX(%pattern%,expression)
pattern:是要查找的子字符串
expression:是被查找的字符串。
PATINDEX()函数返回字符或子字符串在字符串或表达式中的开始位置。
注:(1)如果在被查找字符串中出现多次子字符串,PATINDEX()函数返回的是第一次出现的位置下标。
       (2)PATINDEX()必须要用通配符,否则查询不到子字符串,见例子。

2、CHARINDEX()语法格式:CHARINDEX(pattern,expression,start_location)
pattern:是要查找的子字符串
expression:是被查找的字符串。
start_location:是charindex函数开始在expression中找pattern的起始位置
CHARINDEX()函数返回一个整数,返回子字符串在字符串或表达式中的开始位置,如果没有找到子字符串,那么函数结果为0。

二、举例说明:
1、PATINDEX()函数:

select 'SQL server2008,Hello World!' as 整个字符串,PATINDEX('Hello','SQL server2008,Hello World!') 不加通配符的结果
select 'SQL server2008,Hello World!' as 整个字符串,PATINDEX('%Hello%','SQL server2008,Hello World!') 加通配符的结果

查询字符或子字符串出现多次的情况

2、CHARINDEX()函数:

--1、正常查找子字符串
select 'SQL server2008,Hello World!' as 整个字符串,CHARINDEX('Hello','SQL server2008,Hello World!') 子字符串的位置下标
--2、带着起始位置的下标,那么就从起始位置开始查找要找的子字符串,那么查找o就找到World的o,而不是Hello中的o的位置下标。
select 'SQL server2008,Hello World!' as 整个字符串,CHARINDEX('o','SQL server2008,Hello World!',21) 子字符串的位置下标
--3、找不到子字符串的,返回0
select 'SQL server2008,Hello World!' as 整个字符串,CHARINDEX('server2014','SQL server2008,Hello World!') 子字符串的位置下标

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值