substr('智能ABC',2,2)='能A'
如果想要按字节来计算则可以采用substrb函数,用法一样
substrb('智能ABC',3,4)='能AB'
当然还有另外几个按不同编码计算的函数
substrc:按Unicode编码,
substr2:按UCS2编码,
substr4:按UCS4编码。
不一样 比如这两个 select substr('你好吗',1,1) from dualselect substrb('你好吗',1,1) from dual第一个有结果,是“你”,第二个就无结果 因为第一个是按字符位来取,从第一位取一位长度 第二个是按字节来取,对于汉字来说,一个汉字是2个字没有你就自己写一个咯,
/**************create by Kevin.Chen 20161210
Double-byte characters are dropped ,if they are truncated
**************/
create function dbo.substrb(@demo nvarchar(100),@sub int,@len int)
returns nvarchar(100)
as
begin
declare @datalen int,@cut nvarchar(100),@returns nvarchar(100)
set @returns=''
set @cut=@demo
set @sub=@sub
while @sub>0
begin
--set @datalen=case when unicode(left(@cut,1)) between 97 and 122 then 1 when unicode(left(@cut,1)) between 65 and 90 then 1 else 2 end
set @datalen=case when unicode(left(@cut,1))<127 then 1 else 2 end
set @cut=right(@cut,len(@cut)-1)
set @sub=@sub-@datalen
end
while @len>0
begin
--set @datalen=case when unicode(left(@cut,1)) between 97 and 122 then 1 when unicode(left(@cut,1)) between 65 and 90 then 1 else 2 end
set @datalen=case when unicode(left(@cut,1))<127 then 1 else 2 end
set @len=@len-@datalen
if @len>=0
begin
set @returns=@returns+left(@cut,1)
set @cut=right(@cut,len(@cut)-1)
end
end
return (@returns)
end
go
declare @demo1 nvarchar(500),@demo2 nvarchar(500)
set @demo1=N'。,【】微软SqlServer数据库2014'
set @demo2=N'!@#$微软SqlServer数据库2014'
select dbo.substrb(@demo1,0,6)
select dbo.substrb(@demo2,0,6)
go
drop function dbo.substrb
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)