SQL之提取子字符串--使用substr\charindex\patindex

当我们要获取一个字符串的字串时,我们可以用substr函数来实现喔,现在我们来看看它的用法吧!
substr(string ,start, length)

1、string :要被截取的字符串

2、start :截取的字串开始的位置,【必填】,为正数时,是从左往右数的第start个字符,为负数时,是从右往左数的第| start | 个字符。它默认值是1,若是填错成0时,它会默认为默认值1。

3、length :截取的字串的长度,【可选】,缺省时返回字符表达式的值结束前的全部字符。

我们来看一个简单的例子:

create table nameset( 
emp_no int  primary key not null,
first_name varchar(45),
last_name varchar(45)
);
insert into nameset
values(1,"Chirstian","Brown"),
(2,"Bezalel","James");

实现的表长这样:
在这里插入图片描述使用substr获取first_name末尾的两个字符组成的字串:

select substr(first_name,length(first_name)-1,2) 
from nameset;

得到的结果:
在这里插入图片描述可见实现了我们的要求。

也可以这样写:

select substr(first_name,-2,2) 
from nameset;

得到结果:
在这里插入图片描述

另外的,有时候我们会遇到这样的情况:我们想要知道某个字符串里是否包含一个特定的字符串,这时候,我们就可以使用谓词 like 来进行字符串的匹配,或者使用charindex函数

(1) like ‘<匹配值>’ [ESCAPE ‘<换码字符>’]
<匹配串>可以是一个完整的字符串,也可以包含通配符%和_
%表示任意长度(长度可以为0)的字符串

如:a%b表示以a开头,以b结尾的任意长度的字符串

_表示任意单个字符
如:a_b表示以a开头,以b结尾的长度为3的任意字符串。

*注意:
1、当数据库字符集为ASSII时,一个汉字需要两个_ ;
当字符集为GBK时只需要一个_
2、如果要查询的字符串本身就含有通配符%或_ ,这时就要使用ESCAPE’<换码字符>'短语对通配符进行转义了。

如:

select * from Course
where Cname like'DB\_%i__' escape'\';

这里的匹配串中,第一个_前面有换码字符 \ ,所以它被转义为普通的_字符。而i后面的两个_的前面都没有换码字符 \ ,所以它们仍作为通配符。

在sql server中:
(2)charindex(string1,string2 [,start_location])
表示在string2中查找string1, start_location表示开始查找的位置

这个函数它默认大小写不敏感 ,
如:select charindex(‘test’,‘this Test is Test’)
结果为:6

可以添加语句COLLATE Latin1_General_CS_AS 使得它大小写敏感
如:select charindex(‘test’,'this Test is Test’COLLATE Latin1_General_CS_AS)
结果为:0

(3)
charindex是全匹配
patindex是模糊匹配,它的是否敏感跟charindex相同

如:select patindex(’%ter%’,‘interesting data’)
结果为:3
select patindex(’%t_ng%’,‘interesting data’)
结果为:8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值