case语句只有在有空格时才删除多余的空格

时间:2012-10-04 11:02:22

标签: sql sql-server tsql replace trim

我用@替换所有空格

SELECT *,  REPLACE(NAME,' ','@') AS NAME2

结果错过@test @ blogs @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

然后我使用此

删除名称后的所有@符号
select *, substring(Name2,0,charindex('@@',Name2)) as name3

然后给出我想要的结果,例如MISS @ test @ blogs

然而有些人没有给出这个结果,他们是空的。这是因为令人烦恼的是,我读过的工作表中的某些行没有名称后面的空格。

是否有一个我可以使用的案例陈述,所以它只删除名称后面的@符号,如果它们在那里? 感谢

5 个答案:

答案 0 :(得分:3)

函数rtrim可用于删除尾随空格。例如:

select replace(rtrim('miss test blogs             '),' ','@')
-->
'miss@test@blogs'

Example at SQL Fiddle.

答案 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)

SQL Fiddle Demo

答案 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/

脚本的作者详细解释了这种情况的一个很好的解决方案。