字符串空格问题

TurboWay 2016-09-29 12:51:42

这边是一条从别的系统抓来的数据,发现这条数据末尾是带空格的,但是直接用RTRIM() ,
REPLACE() 无法去掉空格,用CHARINDEX()也检测不到空格。奇怪的是,直接把这个值复制出来,对它做以上操作是可以去掉空的,但是复制出来的字符串长度却和原来的不一样,这是什么情况?有没人遇到过,怎么解决?
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TurboWay 2016-09-29
  • 打赏
  • 举报
回复
引用 4 楼 TurboWay 的回复:
[quote=引用 1 楼 ch21st 的回复:] 末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
对的,有可能不是空格;
引用 3 楼 ch21st 的回复:
[quote=引用 2 楼 TurboWay 的回复:] [quote=引用 1 楼 ch21st 的回复:] 末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
我用CHARINDEX检测空格可以,检测tab是返回0;说明应该不是tab[/quote] 你可以仿造上面我用方法,从右取字符,然后用ASCII看ascii是多少? 不可见字符不仅仅tab,比如(32是空格)

        
        DECLARE @i INT=1
        WHILE @i<ASCII('0')
        BEGIN
        	PRINT 'ASCII='+CONVERT(VARCHAR,@i)+ is '[' +CHAR(@i)+']'
        	SET @i+=1
        END

ASCII=1 is []
ASCII=2 is []
ASCII=3 is []
ASCII=4 is []
ASCII=5 is []
ASCII=6 is []
ASCII=7 is []
ASCII=8 is []
ASCII=9 is [	]
ASCII=10 is [
]
ASCII=11 is []
ASCII=12 is []
ASCII=13 is [
]
ASCII=14 is []
ASCII=15 is []
ASCII=16 is []
ASCII=17 is []
ASCII=18 is []
ASCII=19 is []
ASCII=20 is []
ASCII=21 is []
ASCII=22 is []
ASCII=23 is []
ASCII=24 is []
ASCII=25 is []
ASCII=26 is []
ASCII=27 is []
ASCII=28 is []
ASCII=29 is []
ASCII=30 is []
ASCII=31 is []
ASCII=32 is [ ]
ASCII=33 is [!]
ASCII=34 is ["]
ASCII=35 is [#]
ASCII=36 is [$]
ASCII=37 is [%]
ASCII=38 is [&]
ASCII=39 is [']
ASCII=40 is [(]
ASCII=41 is [)]
ASCII=42 is 
  • ASCII=43 is
  • [+] ASCII=44 is [,] ASCII=45 is [-] ASCII=46 is [.] ASCII=47 is [/]
[/quote]嗯嗯 好的 我try一下[/quote] 3Q ,是10 换行~
TurboWay 2016-09-29
  • 打赏
  • 举报
回复
引用 1 楼 ch21st 的回复:
末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
对的,有可能不是空格;
引用 3 楼 ch21st 的回复:
[quote=引用 2 楼 TurboWay 的回复:] [quote=引用 1 楼 ch21st 的回复:] 末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
我用CHARINDEX检测空格可以,检测tab是返回0;说明应该不是tab[/quote] 你可以仿造上面我用方法,从右取字符,然后用ASCII看ascii是多少? 不可见字符不仅仅tab,比如(32是空格)

        
        DECLARE @i INT=1
        WHILE @i<ASCII('0')
        BEGIN
        	PRINT 'ASCII='+CONVERT(VARCHAR,@i)+ is '[' +CHAR(@i)+']'
        	SET @i+=1
        END

ASCII=1 is []
ASCII=2 is []
ASCII=3 is []
ASCII=4 is []
ASCII=5 is []
ASCII=6 is []
ASCII=7 is []
ASCII=8 is []
ASCII=9 is [	]
ASCII=10 is [
]
ASCII=11 is []
ASCII=12 is []
ASCII=13 is [
]
ASCII=14 is []
ASCII=15 is []
ASCII=16 is []
ASCII=17 is []
ASCII=18 is []
ASCII=19 is []
ASCII=20 is []
ASCII=21 is []
ASCII=22 is []
ASCII=23 is []
ASCII=24 is []
ASCII=25 is []
ASCII=26 is []
ASCII=27 is []
ASCII=28 is []
ASCII=29 is []
ASCII=30 is []
ASCII=31 is []
ASCII=32 is [ ]
ASCII=33 is [!]
ASCII=34 is ["]
ASCII=35 is [#]
ASCII=36 is [$]
ASCII=37 is [%]
ASCII=38 is [&]
ASCII=39 is [']
ASCII=40 is [(]
ASCII=41 is [)]
ASCII=42 is 
  • ASCII=43 is
  • [+] ASCII=44 is [,] ASCII=45 is [-] ASCII=46 is [.] ASCII=47 is [/]
[/quote]嗯嗯 好的 我try一下
道素 2016-09-29
  • 打赏
  • 举报
回复
引用 2 楼 TurboWay 的回复:
[quote=引用 1 楼 ch21st 的回复:] 末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
我用CHARINDEX检测空格可以,检测tab是返回0;说明应该不是tab[/quote] 你可以仿造上面我用方法,从右取字符,然后用ASCII看ascii是多少? 不可见字符不仅仅tab,比如(32是空格)

        
        DECLARE @i INT=1
        WHILE @i<ASCII('0')
        BEGIN
        	PRINT 'ASCII='+CONVERT(VARCHAR,@i)+ is '[' +CHAR(@i)+']'
        	SET @i+=1
        END

ASCII=1 is []
ASCII=2 is []
ASCII=3 is []
ASCII=4 is []
ASCII=5 is []
ASCII=6 is []
ASCII=7 is []
ASCII=8 is []
ASCII=9 is [	]
ASCII=10 is [
]
ASCII=11 is []
ASCII=12 is []
ASCII=13 is [
]
ASCII=14 is []
ASCII=15 is []
ASCII=16 is []
ASCII=17 is []
ASCII=18 is []
ASCII=19 is []
ASCII=20 is []
ASCII=21 is []
ASCII=22 is []
ASCII=23 is []
ASCII=24 is []
ASCII=25 is []
ASCII=26 is []
ASCII=27 is []
ASCII=28 is []
ASCII=29 is []
ASCII=30 is []
ASCII=31 is []
ASCII=32 is [ ]
ASCII=33 is [!]
ASCII=34 is ["]
ASCII=35 is [#]
ASCII=36 is [$]
ASCII=37 is [%]
ASCII=38 is [&]
ASCII=39 is [']
ASCII=40 is [(]
ASCII=41 is [)]
ASCII=42 is 
  • ASCII=43 is
  • [+] ASCII=44 is [,] ASCII=45 is [-] ASCII=46 is [.] ASCII=47 is [/]
TurboWay 2016-09-29
  • 打赏
  • 举报
回复
引用 1 楼 ch21st 的回复:
末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9
我用CHARINDEX检测空格可以,检测tab是返回0;说明应该不是tab
道素 2016-09-29
  • 打赏
  • 举报
回复
末尾的不一定是空格,也可以是tab 比如,我下面字符串最后就是tab:

declare @s varchar(100)='abcdef	'
select ascii(right(@s,1))
--返回9

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧