一个简单的字符截取的问题
我想截取一个字符,如果超过规定的长度n就截取n-2字符,再加 .. 补上,如果不足,就补足 ....
这个不是问题,但我现在发现这样取的话,会出现以下现象
假如n是6 有字符
aaaaaaaaaaaaaaaaaaaaaaaaaa
我我我我我我我我我我我我
我a
结果:
aaaa..
我我我我..
我a....
这样有中文英文的话就对不齐了.
我现在想得到的就是以中文的字符为准则,即要以下结果
aaaaaaaa..
我我我我..
我a.......
我该怎么写,最好是函数,谢谢
问题点数:20、回复次数:6Top
1 楼lmj2003(雁不归)回复于 2004-12-03 20:54:32 得分 2
能不能用NVARCHAR也就是宽字符。
帮你顶。
Top
2 楼li_guang(李广)回复于 2005-01-02 15:17:37 得分 2
帮顶一下先Top
3 楼zhangzs8896(小二)回复于 2005-01-02 15:31:55 得分 2
使用datalength()去判断长度,别用len()
比如:
select datalength('我我我我..') -- 返回10
select len('我我我我..') --返回6Top
4 楼didoleo(冷月无声)回复于 2005-01-02 16:21:14 得分 6
select
case
when
datalength(@str)<>len(@str) and datalength(@str)<=12 then @str+replicate('.',12-datalength(@str))
when
datalength(@str)<>len(@str) and datalength(@str)>12 then left(@str,4)+'..'
when
datalength(@str)=len(@str) and len(@str)<=6 then @str+replicate('.',12-len(@str))
when
datalength(@str)=len(@str) and len(@str)>6 then left(@str,10)+'..'
end
Top
5 楼didoleo(冷月无声)回复于 2005-01-02 16:33:11 得分 4
--改一点
select
case
when
datalength(@str)<>len(@str) and datalength(@str)<=12 then @str+replicate('.',10-datalength(@str))
when
datalength(@str)<>len(@str) and datalength(@str)>12 then left(@str,4)+'..'
when
datalength(@str)=len(@str) and len(@str)<=6 then @str+replicate('.',12-len(@str))
when
datalength(@str)=len(@str) and len(@str)>6 then left(@str,8)+'..'
end
Top
6 楼didoleo(冷月无声)回复于 2005-01-02 16:36:15 得分 4
--晕,还得改一点 :) 再改不对,就看楼下的了,呵呵. :)
select
case
when
datalength(@str)<>len(@str) and datalength(@str)<=12 then @str+replicate('.',10-datalength(@str))
when
datalength(@str)<>len(@str) and datalength(@str)>12 then left(@str,4)+'..'
when
datalength(@str)=len(@str) and len(@str)<=6 then @str+replicate('.',10-len(@str))
when
datalength(@str)=len(@str) and len(@str)>6 then left(@str,8)+'..'
endTop




