1

我用@替换所有空白

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

结果miss@test@blogs@@@@@@@@@@@@@@(不同数量的@s取决于名称的长度!

然后我使用这个删除名称后的所有@符号

select *, substring(Name2,0,charindex('@@',Name2)) as name3

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

但是有些没有给出这个结果,它们是空的。这是因为令人讨厌的是,我读过的工作表中的某些行在名称后没有空格。

有没有我可以使用的 case 语句,所以它只删除名称后的 @ 符号,如果它们首先存在的话?谢谢

4

5 回答 5

3

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

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

SQL Fiddle 的示例。

于 2012-10-04T11:06:59.767 回答
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 小提琴演示

于 2012-10-04T11:26:05.847 回答
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  ';
于 2012-10-04T13:38:38.223 回答
0

几天前我遇到了同样的问题。

实际上,有一种快速的方法可以从字符串的开头和结尾中减去空格。在 SQL Server 中,您可以为此使用 RTRIM 和 LTRIM。第一个从右侧抑制空间,第二个从左侧抑制空间。但是,如果在您的场景中,字符串中间也可能存在多个空格,我建议您查看 SQL Server Central 上的这篇文章:http ://www.sqlservercentral.com/articles/T-SQL/68378 /

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

于 2012-10-04T11:21:36.837 回答
0

不太明白这个问题,但是如果问题是某些名称后没有空格,您不能先这样做:

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

即,立即为所有名称添加一个空格?

于 2012-10-04T11:07:40.483 回答