当我们要获取一个字符串的字串时,我们可以用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