LTRIM, RTRIM的问题 最近老遇到一些问题,LTRIM,RTRIM 只能去掉开头的空格,但是一些非打印字符就不行了,有木有办法都去掉呢?Replace不行,Replace把所有的都给去掉了,写个过程又感觉有点太麻烦了,不知道大家有没有遇到过呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么是非打印字符ltrim去左侧空格rtrim去右侧空格 非打印字符?replace(字段,char(9),'')? declare @str varchar(50)SELECT @STR=' !#$@%$#^%ABC123'SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,'')你指定合法字符,然后这样去前缀到第一个合法字符代替LTRIM char(9) 水平制表符 char(10)换行键 char(13)回车键 偷个懒,RTRIM用REVERSER处理一下。declare @str varchar(50)SELECT @STR=' !#$@%$#^%ABC123*&^!#@%$# )( 'SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,''),REVERSE(STUFF(REVERSE(@STR),1,PATINDEX('%[0-9A-Za-z.]%',REVERSE(@STR))-1,'')) 用REPLACE的话可能会把内容中间的字符去掉。 如下例:create table #tb(strs varchar(50))insert into #tb values ('500ml*1' ) insert into #tb values ('10g*10' ) insert into #tb values ('0.5DF:ASD*10' ) insert into #tb values ('10JSH*10*10')select * from #tbselect SUBSTRING(strs,1,CHARINDEX('*',strs)-1) from #tb--------------------------------------------------500ml10g0.5DF:ASD10JSH(4 行受影响)方法二select LEFT(strs,CHARINDEX('*',strs)-1) from #tb--------------------------------------------------500ml10g0.5DF:ASD10JSH(4 行受影响)方法三select REPLACE(strs,right(strs,len(strs)-CHARINDEX('*',strs)+1),'') from #tb----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------500ml10g0.5DF:ASD10JSH(4 行受影响)方法四create function getabovestar(@gg nvarchar(20))returns nvarchar(20)asbeginreturn (case when charindex('*',@gg)>0 then left(@gg,charindex('*',@gg)-1) else @gg end)endgoselect dbo.getabovestar(gg) from #tb 原来SQL也支持正则啊....难道非打印字符不是\s吗?难道我今天刚看的正则教程又忘了?...再回去看看...哦!\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ (空格)\f\n\r\t\v]。那你就将[\f\n\r\t\v]*替换为空啊 理论上,从nchar(0)到nchar(65535)范围内,不能正常显示出字符的东东,都叫非打印字符. 非打印字符好处理,直接Replace就行,不过我要的是把开头和结尾的去掉,因为LTrim,Ttrim是去不掉的。 问一存储过程写法 请教几个问题? 给表添加一个合计行 【急】日期查询问题 帮帮忙,控制面板\管理工具下的"ODBC数据源管理"不见了,刚才还有的 字段累加问题 怎么将一个文件夹下的所有txt文件导入sql数据库 如何将Excel导入到SQL Server 求一条sql统计语句。急!急!急! SQL Server 2000 如何更改字符集? 游标问题.大家看下我写的对么.. 谁有《Database System Concepts》(Fifth Edition)的“习题”答案?
ltrim去左侧空格
rtrim去右侧空格
SELECT @STR=' !#$@%$#^%ABC123'
SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,'')你指定合法字符,然后这样去前缀到第一个合法字符代替LTRIM
declare @str varchar(50)
SELECT @STR=' !#$@%$#^%ABC123*&^
!#@%$#
)( '
SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,'')
,REVERSE(STUFF(REVERSE(@STR),1,PATINDEX('%[0-9A-Za-z.]%',REVERSE(@STR))-1,''))
(
strs varchar(50)
)insert into #tb values ('500ml*1' )
insert into #tb values ('10g*10' )
insert into #tb values ('0.5DF:ASD*10' )
insert into #tb values ('10JSH*10*10')select * from #tbselect SUBSTRING(strs,1,CHARINDEX('*',strs)-1) from #tb
--------------------------------------------------
500ml
10g
0.5DF:ASD
10JSH(4 行受影响)
方法二select LEFT(strs,CHARINDEX('*',strs)-1) from #tb
--------------------------------------------------
500ml
10g
0.5DF:ASD
10JSH(4 行受影响)方法三
select REPLACE(strs,right(strs,len(strs)-CHARINDEX('*',strs)+1),'') from #tb
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
500ml
10g
0.5DF:ASD
10JSH(4 行受影响)
方法四create function getabovestar
(@gg nvarchar(20))
returns nvarchar(20)
as
begin
return (case when charindex('*',@gg)>0 then left(@gg,charindex('*',@gg)-1) else @gg end)
end
go
select dbo.getabovestar(gg) from #tb
难道非打印字符不是\s吗?难道我今天刚看的正则教程又忘了?
...
再回去看看...
哦!
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ (空格)\f\n\r\t\v]。那你就将[\f\n\r\t\v]*替换为空啊
理论上,从nchar(0)到nchar(65535)范围内,不能正常显示出字符的东东,都叫非打印字符.