+ -
当前位置:首页 → 问答吧 → 求删除字符串左右两边空,空格,其它不可见乱码的语句

求删除字符串左右两边空,空格,其它不可见乱码的语句

时间:2011-12-19

来源:互联网

RT

作者: jiemo587   发布时间: 2011-12-19

ltrim()rtrim() 最后句不知道什么意思

作者: szstephenzhou   发布时间: 2011-12-19

去空格可以用 ltrim 和 rtrim 分别是左右

作者: AcHerat   发布时间: 2011-12-19

上面的用了,字段里面有空的删不掉,影响我判断字符串长度

我记得有人写过。。。

作者: jiemo587   发布时间: 2011-12-19

引用 3 楼 jiemo587 的回复:
上面的用了,字段里面有空的删不掉,影响我判断字符串长度

我记得有人写过。。。

那就不是空格
回车换行
有可能
SQL code
replace(replace(col,char(13),''),char(10),'')

作者: wufeng4552   发布时间: 2011-12-19

那就不是你说的那个意思。 
引用 3 楼 jiemo587 的回复:
上面的用了,字段里面有空的删不掉,影响我判断字符串长度

我记得有人写过。。。

作者: szstephenzhou   发布时间: 2011-12-19

SQL code

declare @t varchar(8000)
set @t = ' a   b '
select  replace(replace(replace(replace(rtrim(ltrim(@t)), ' ', ''), char(9),
                                ''), char(10), ''), char(13), '')
/*
ab
*/

作者: maco_wang   发布时间: 2011-12-19

引用 4 楼 wufeng4552 的回复:
引用 3 楼 jiemo587 的回复:
上面的用了,字段里面有空的删不掉,影响我判断字符串长度

我记得有人写过。。。

那就不是空格
回车换行
有可能

SQL code

replace(replace(col,char(13),''),char(10),'')



测试过,也不是回车换行,谢谢

继续求助

作者: jiemo587   发布时间: 2011-12-19

其他不可见乱码?有可能是换行符和回车符。

也就是char(10)和char(13)

作者: fredrickhu   发布时间: 2011-12-19

还不是
那就把你的数据可以想要的结果贴出来看下

引用 7 楼 jiemo587 的回复:
引用 4 楼 wufeng4552 的回复:
引用 3 楼 jiemo587 的回复:
上面的用了,字段里面有空的删不掉,影响我判断字符串长度

我记得有人写过。。。

那就不是空格
回车换行
有可能

SQL code

replace(replace(col,char(13),''),char(10),'')



测试过,也不是回车换行,谢谢

继续求助

作者: szstephenzhou   发布时间: 2011-12-19

[code=SQL]

declare @t varchar(8000)
set @t = '210009  '
select replace(replace(replace(replace(rtrim(ltrim(@t)), ' ', ''), char(9),
  ''), char(10), ''), char(13), '')

/*
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
210009??

(1 行受影响)

*/

现在我贴到里面的@t的格式应该是被去掉了,所以你们不能测试到

作者: jiemo587   发布时间: 2011-12-19

所有的数据我都扔到文本里面去过格式,但还是错误数据比较多,所以不能一个个修改

作者: jiemo587   发布时间: 2011-12-19

测试不出来;帮不到你了

作者: szstephenzhou   发布时间: 2011-12-19

估计是全角空格的问题。你在试试:
SQL code

declare @t varchar(8000)
set @t = ' a   b        '
select  REPLACE(replace(replace(replace(replace(rtrim(ltrim(@t)), ' ', ''), char(9),
                                ''), char(10), ''), char(13), ''),' ','')
/*
ab
*/

作者: maco_wang   发布时间: 2011-12-19

可能是全角空格的问题

作者: pengxuan   发布时间: 2011-12-19

引用 13 楼 maco_wang 的回复:
估计是全角空格的问题。你在试试:

SQL code


declare @t varchar(8000)
set @t = ' a b   '
select REPLACE(replace(replace(replace(replace(rtrim(ltrim(@t)), ' ', ''), char(9),
……



额,还不对,得到的结果和上面一样

谢谢

作者: jiemo587   发布时间: 2011-12-19

如果有人需要,我可以把测试数据通过邮件的方式发出去

作者: jiemo587   发布时间: 2011-12-19

引用 16 楼 jiemo587 的回复:

如果有人需要,我可以把测试数据通过邮件的方式发出去


有人需要吗?

作者: qianjin036a   发布时间: 2011-12-19

该回复于2011-12-19 11:17:27被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#19楼 得分:0回复于:2011-12-19 11:19:12
其实已经通过截取字符串的方式取前6位,问题解决了。。。

但还不明白那两个问号到底是什么东西

作者: pengpeng409   发布时间: 2011-12-19

使用vs写一个函数部署到数据库里,参数如:(字符串,正则表达式,替换字符)
正则表达式如下:(^\s+)|(\s+$)

部署的函数:SqlRegexReplaceGen

调用如:
  select test.dbo.SqlRegexReplaceGen
(' a b   ','(^\s+)|(\s+$)','')


作者: jiemo587   发布时间: 2011-12-19

如果仅在ASC码范围内:
SQL code
create function delstr(@t varchar(100))
returns varchar(100)
as
begin
select @t=stuff(@t,number,1,CHAR(32)) 
from master..spt_values 
where type='p' and number between 1 and len(@t) and number in(
charindex(char(9),@t,number),
CHARINDEX(char(10),@t,number),
CHARINDEX(char(13),@t,number),
CHARINDEX(char(28),@t,number),
CHARINDEX(char(29),@t,number),
CHARINDEX(char(30),@t,number),
CHARINDEX(char(31),@t,number),
CHARINDEX(char(127),@t,number)
)
return replace(@t,CHAR(32),'')
end
go
select dbo.delstr(' fasdfas'+CHAR(9)+'dfsdf sadf  ')
/*
----------------------------------------------------------------------------------------------------
fasdfasdfsdfsadf

(1 行受影响)

*/
go
drop function dbo.delstr

作者: gongjian0628   发布时间: 2011-12-19

是不是varchar 和nvarchar这种类型的问题呢 一个是会自动添加空格 一个不是

作者: qianjin036a   发布时间: 2011-12-19