1

これを使用して、すべての空白を@に置き換えます

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

結果は miss@test@blogs@@@@@@@@@@@@@ (名前の長さに応じて @ の数が異なります!

次に、これを使用して名前の後のすべての @ 記号を削除します

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

これにより、たとえば MISS@test@blogs の望ましい結果が得られます

ただし、この結果が得られないものもあり、null です。これは、私が読んだシートの一部の行が名前の後にスペースがないためです。

最初に名前の後に@記号がある場合にのみ削除するように、私が使用できるケースステートメントはありますか? ありがとう

4

5 に答える 5

3

この関数rtrimを使用して、末尾のスペースを削除できます。例えば:

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

SQL Fiddle の例。

于 2012-10-04T11:06:59.767 に答える
2
select name2, left(name2,len(name2)+1-patindex('%[^@]%',reverse(name2)+'.'))
from (
  SELECT *, REPLACE(NAME,' ','@') AS NAME2
  from t
) x;

このSQL フィドルを確認してください

後世のために、サンプルテーブル:

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 に答える
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 に答える
0

私は数日前にこれと同じ問題を抱えていました。

実際には、文字列内の開始と終了の両方からスペースを減算する簡単な方法があります。SQL Serverでは、これにRTRIMとLTRIMを使用できます。1つ目は右側からスペースを抑制し、2つ目は左側からスペースを抑制します。ただし、シナリオで文字列の途中に複数のスペースが存在する可能性がある場合は、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 に答える