SQL 字符串函数



/* 1、字符替换函数,类似PB里的replace函数 */

--STUFF ( character_expression , start , length , character_expression )

SELECT STUFF('abcdef', 3,2, 'IJK');

--结果:abIJKdef

--说明:把前面第三个字符开始的两个长度位置替换成后面的字符串

/* 2、正则函数 */
--PATINDEX ( '%pattern%' , expression )

select patindex('%[0-9]%','dcds23')

--结果:5

--说明:返回第一个数字在字符串中出现的位置

/* 截取字符串中的汉字 */
declare @s varchar(100),@i int

set @s = '12A测试shu汉字ju'

set @i = patindex('%[^吖-咗]%',@s)

while @i >0
begin

set @s = stuff(@s,@i,1,'')

set @i = patindex('%[^吖-咗]%',@s)

end

print @s

/* 封装成函数,函数功能,返回字符串中的所有汉字 */

if object_id('getHZ') is not null drop function getHZ

go

create function getHZ(@s varchar(100)) returns varchar(100)
as
begin
declare @i int;
set @i = patindex('%[^吖-咗]%',@s)

while @i >0
begin

set @s = stuff(@s,@i,1,'')

set @i = patindex('%[^吖-咗]%',@s)

end
return @s
end

go

print dbo.getHZ('ddd哈哈,测试fff');


/* 3、查找函数 */
-- CHARINDEX ( expression1 , expression2 [ , start_location ] )

select charindex('汉字','ss汉字dfff');

--3

/* 4、截取函数 */

-- SUBSTRING ( expression , start , length )

select substring('123456',2,3);
--234

/* 5、字符串长度函数 */
--返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

--LEN ( string_expression )

select len('ddd ');
--3

select len(' ddd ');
--5

select len('ddd ddd');
--7

select len('测试')
--2



 



/* 字符串按分隔符位置截取函数 */


IF OBJECT_ID('poscopy') IS NOT NULL

drop function poscopy
GO

create function poscopy(
@S varchar(2000), --包含多个数据项的字符串
@SPLIT varchar(10), --数据分隔符
@INDEX int --要获取的数据项的位置
)
returns varchar(200)
AS
begin
if (@S is null or @s='') return ''
if (@SPLIT is null or @SPLIT = '') return ''

if @INDEX < 1 return ''

declare @CUTLEN int;

set @CUTLEN = CHARINDEX(@SPLIT,@S+@SPLIT)

while @INDEX>1 AND @CUTLEN>0
begin
set @INDEX=@INDEX-1;
set @S=STUFF(@S,1,@CUTLEN,'');
set @CUTLEN = CHARINDEX(@SPLIT,@S+@SPLIT);
end

return (ISNULL(LEFT(@S,@CUTLEN-1),''))
END

--字顶顶顶顶
GO


/* 获取字符串分隔符位置函数 */
if object_id('posnum') is not null drop function posnum

go

create function posnum(
@s varchar(2000),
@split varchar(10)
)
returns int
as
begin
if (@S is null or @s='') return 0
if (@SPLIT is null or @SPLIT = '') return 0

declare @Num int,@slen int;

set @Num = 0;

set @slen = charindex(@split,@s);

while @slen > 0
begin
set @Num = @Num + 1;
set @s = stuff(@s,1,@slen,'');
set @slen = charindex(@split,@s);
end

if @s <> ''
set @num = @num + 1;
return @Num;
end

go

print dbo.posnum('aaa|dd','|');
--2

print dbo.posnum('aaa|dd|','|');
--2

print dbo.posnum('aaa汉字dd','汉字');
--2

 

posted @ 2010-02-03 17:27  一 点  阅读(275)  评论(0编辑  收藏  举报