我用@替换所有空格
SELECT *, REPLACE(NAME,' ','@') AS NAME2
结果错过@test @ blogs @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
然后我使用此
删除名称后的所有@符号select *, substring(Name2,0,charindex('@@',Name2)) as name3
然后给出我想要的结果,例如MISS @ test @ blogs
然而有些人没有给出这个结果,他们是空的。这是因为令人烦恼的是,我读过的工作表中的某些行没有名称后面的空格。
是否有一个我可以使用的案例陈述,所以它只删除名称后面的@符号,如果它们在那里? 感谢
答案 0 :(得分:3)
函数rtrim
可用于删除尾随空格。例如:
select replace(rtrim('miss test blogs '),' ','@')
-->
'miss@test@blogs'
答案 1 :(得分:2)
试试这个:
Declare @t table (name varchar(100),title varchar(100),forename varchar(100))
insert into @t
values('a b c','dasdh dsalkdk asdhl','asd dfg sd')
SELECT REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(name)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS Name,
REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(title)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS title,
REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(forename)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS forename
FROM @t WHERE
(CHARINDEX(' ',NAME) > 0 or CHARINDEX(' ',title) > 0 or CHARINDEX(' ',forename) > 0)
答案 2 :(得分:2)
select name2, left(name2,len(name2)+1-patindex('%[^@]%',reverse(name2)+'.'))
from (
SELECT *, REPLACE(NAME,' ','@') AS NAME2
from t
) x;
选中此SQL Fiddle
对于后代,样本表:
create table t (name varchar(100));
insert t select 'name@name@ne@@@'
union all select '@name@name'
union all select 'name name hi '
union all select 'joe public'
union all select ''
union all select 'joe'
union all select 'joe '
union all select null
union all select ' leading spaces'
union all select ' leading trailing ';
答案 3 :(得分:0)
不太明白这个问题,但如果问题是某些名字后面没有空格,你不能先这样做:
SELECT *, REPLACE(NAME+' ',' ','@') AS NAME2
即,立即为所有名字添加一个空格?
答案 4 :(得分:0)
几天前我遇到了同样的问题。
实际上,有一种快速的方法可以从开始和结束内部字符串中减去空格。在SQL Server中,您可以使用RTRIM和LTRIM。第一个从右侧压缩空间而从左侧压缩第二个空间。但是,如果在您的场景中也可能在字符串中间存在多个空间,那么我会在SQL Server Central上查看这篇文章:http://www.sqlservercentral.com/articles/T-SQL/68378/脚本的作者详细解释了这种情况的一个很好的解决方案。