需求:获取字符数组1,2,3的第2个元素
方法:通过自定义函数来实现
# 截取如json格式的数组
需求:获取字符数组1,2,3的第2个元素
方法:通过自定义函数来实现
/*
获取字符串数组某个元素
*/
if exists (select 1 from sysobjects where id = object_id('Get_StrArrayStrOfIndex' ))
drop Function Get_StrArrayStrOfIndex
go
create function Get_StrArrayStrOfIndex
(
@str varchar(5000 ), -- 要分割的字符串
@split varchar(10 ), -- 分隔符号
@index int --取第几个元素
)
returns varchar (5000)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str =ltrim( rtrim(@str ))
set @start =1
set @next =1
set @seed =len( @split)
set @location =charindex( @split,@str )
while @location <>0 and @index> @next
begin
set @start =@location+ @seed
set @location =charindex( @split,@str ,@start)
set @next =@next+ 1
end
if @location =0
select @location =len (@str)+ 1
return substring (@str, @start,@location -@start)
end
GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
用例:
print dbo.Get_StrArrayStrOfIndex('1,2,3',',',2)
1
2
2
# SQL取字符串中的数字OR字母
/*功能:获取字符串中的字母*/
CREATE FUNCTION dbo.F_Get_STR (@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S)>0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
select dbo.F_Get_STR('测试ABC123ABC')
GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
功能:获取字符串中的数字
*/
create function dbo.F_Get_Number (@S varchar(100))
returns int
AS
begin
while PATINDEX('%[^0-9]%',@S)>0
begin
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
end
return cast(@S as int)
end
--测试
---select dbo.F_Get_Number('测试AB3C123AB5C')
GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 字符串函数截取(含mysql语法)
1、left(name,4)截取左边的4个字符
列:
SELECT LEFT(201809,4) 年
1
结果:2018
2、right(name,2)截取右边的2个字符
SELECT RIGHT(201809,2) 月份
1
结果:09
3、SUBSTRING(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符
SELECT SUBSTRING('成都融资事业部',5,3)
1
结果:事业部
4、SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符
SELECT SUBSTRING('成都融资事业部',3)
1
结果:融资事业部
5、SUBSTRING(name, -4) 截取name这个字段的第 4 个字符位置(倒数)开始取,直到结束
SELECT SUBSTRING('成都融资事业部',-4)
1
结果:资事业部
6、SUBSTRING(name, -4,2) 截取name这个字段的第 4 个字符位置(倒数)开始取,只截取之后的2个字符
SELECT SUBSTRING('成都融资事业部',-4,2)
1
结果:资事
注意:我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。
7、substring_index('www.baidu.com', '.', 2) 截取第二个 '.' 之前的所有字符
SELECT substring_index('www.baidu.com', '.', 2)
1
结果:www.baidu
8、substring_index('www.baidu.com', '.', -2) 截取第二个 '.' (倒数)之后的所有字符
SELECT substring_index('www.baidu.com', '.', -2)
1
结果:baidu.com
9、SUBSTR(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符
SELECT SUBSTR('成都融资事业部', 1, CHAR_LENGTH('成都融资事业部')-3)
1
结果:成都融资