我现在需要做一个MS SQL Server的函数,目的是:
有两个参数,@str varchar(1000)----输入的字符串,
@getlen int--------------截取的字符长度.从左边开始取
难点:由于前边可能含有全角或中文,所以使用字符截取时,最后一位可能乱码,如果出现要求的长度最后一位是全角或中文时,则少取一个返回. create function (@str varhcar(1000),@getlen int) returns varchar
例如: '1猪头猪头猪头猪头猪头猪头',10
则返回'1猪头猪头',
有两个参数,@str varchar(1000)----输入的字符串,
@getlen int--------------截取的字符长度.从左边开始取
难点:由于前边可能含有全角或中文,所以使用字符截取时,最后一位可能乱码,如果出现要求的长度最后一位是全角或中文时,则少取一个返回. create function (@str varhcar(1000),@getlen int) returns varchar
例如: '1猪头猪头猪头猪头猪头猪头',10
则返回'1猪头猪头',
drop function f_getchar
go
create function f_getchar
(@str varchar(1000),
@getlen int)
returns varchar(1000)
as
begin
declare @s varchar(100)
set @s=''
if datalength(right(@str,1))=2
set @s=left(@str,@getlen/2)
else
set @s=left(@str,@getlen/2)
return @s
endselect dbo.f_getchar('1猪头猪头猪头猪头猪头猪头',10)1猪头猪头
as
begin
return left(@str,@getlen)
end
NVARCHAR一个汉字也算是一个字符
drop function r
go
create function r(@str varchar(1000),@getlen int)
returns varchar(1000)
as
begin
declare @i int,@s varchar(1000),@s1 varchar(1000)
select @i=0,@s='',@s1=@str
while @i<=@getlen and @i<=datalength(@str)
begin
select @s=@s+left(@s1,1),@i=@i+datalength(left(@s1,1)),@s1=stuff(@s1,1,1,'')
if @i+datalength(left(@s1,1))>@getlen
return @s
end
return @s
end
goselect dbo.r('123床12',4)
/*
---------------
123
*/
select dbo.r('12床12',4)
/*
---------------
12床
*/
select dbo.r('1猪头猪头猪头猪头猪头猪头',10)
/*
---------------
1猪头猪头
*/
select dbo.r('1猪头12',6)
/*
---------------
1猪头1
*/
declare @s varchar(100)
declare @len int
declare @sql nvarchar(200)
set @s ='1猪头猪头猪头'
set @len=10
set @sql ='select convert(varchar('+ltrim(str(@len))+'), '''+ltrim(@s)+''') '
--print @sql
exec(@sql)
/*
1猪头猪头
*/
declare @s varchar(100)
declare @len int
declare @sql nvarchar(200)
set @s ='123创123'
set @len=4
set @sql ='select convert(varchar('+ltrim(str(@len))+'), '''+ltrim(@s)+''') '
--print @sql
exec(@sql)
/*
123
*/
可能就只有遍历了,
因为函数不支持动态SQL.
没有想有没有其他合适的方式,