2017-09-08 17 views
0
私のhandphone番号は123 456 789は私がどのようにこれを達成するために123 456789. として出力を必要です。たとえば、

を使用してhandphone番号で二occuringスペースを削除するには?どのようにSQL Serverのクエリ

答えて

3

をここで論理的なアプローチは、その後、最初のスペースまで、最初のスペースの後、CHARINDEXSUBSTRINGを使用して2つのセクションに文字列を分割することですREPLACE最初のスペースの後の文字列、CONCATを使用して文字列を戻します。例えば

DECLARE @s VARCHAR(15) = '123 456 789'; 

SELECT BeforeSpace = SUBSTRING(@s, 1, CHARINDEX(' ', @s)), 
     AfterSpace = SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), 
     ReplaceAfterSpace = REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', ''), 
     Result = CONCAT(SUBSTRING(@s, 1, CHARINDEX(' ', @s)), 
         REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', '')); 

しかし、それはREPLACEを使用して、すべてのスペースを削除し、最初のものは、もともとSTUFFを使用していたスペースを再挿入するために、実際に簡単です:

DECLARE @s VARCHAR(15) = '123 456 789'; 

SELECT STUFF(REPLACE(@s, ' ', ''), CHARINDEX(' ', @s), 0, ' '); 

すべてのことは、その後行うために残されていますスペースがない場合はチェックしてください。全例:

DECLARE @T TABLE (s VARCHAR(15)); 
INSERT @T VALUES ('123 456 789'), ('123456789'), ('123456 789'), ('123 4 5 6 789'); 

SELECT Original = s, 
     Method1 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s 
         ELSE CONCAT(SUBSTRING(s, 1, CHARINDEX(' ', s)), 
           REPLACE(SUBSTRING(s, CHARINDEX(' ', s), LEN(s)), ' ', '')) 
        END, 
     Method2 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s 
         ELSE STUFF(REPLACE(s, ' ', ''), CHARINDEX(' ', S), 0, ' ') 
        END 
FROM @T; 

出力

Original  Method1   Method2 
------------------------------------------- 
123 456 789  123 456789  123 456789 
123456789  123456789  123456789 
123456 789  123456 789  123456 789 
123 4 5 6 789 123 456789  123 456789 

あなたが最初から離れて、すべてのスペースを置き換えることを、私はあなたが言うとき、あなたは第二のスペースを置き換えることを前提に作られているNB、 。私の前提が間違っていて、それを置き換えるだけの2番目のスペースであれば、これは動作しません。

1

これはそれを行う必要があります。

DECLARE @number AS NVARCHAR(12); 
SELECT @number = '123 456 789'; 

SELECT STUFF(@number, CHARINDEX(' ', @number, CHARINDEX(' ', @number) + 1), 1, '') AS REMOVED_SECOND_SPACE; 
0
DECLARE @s VARCHAR(12) = '111 222 333' 

SELECT SUBSTRING(@s, 0, LEN(@s) - CHARINDEX(' ', REVERSE(@s)) + 1) 
    + SUBSTRING(@s, LEN(@s) - CHARINDEX(' ', REVERSE(@s)) + 2, CHARINDEX(' ', REVERSE(@s))); 
0

まあ、他の回答に加えて、私は、あなたが宇宙に続く3桁の数字を持つようにしたいという、仮定に基づいて、最も単純に投稿します、その後、残り:

declare @x1 varchar(15), @x2 varchar(15), @x3 varchar(15), @x4 varchar(15), @x5 varchar(15) 
set @x1 = '123456789' 
set @x2 = '123 456789' 
set @x3 = '123 456 789' 
set @x4 = '123456 789' 
set @x5 = '1 2 3 4 5 6 7 8 9' 

select stuff(replace(@x1, ' ', ''), 4, 0, ' ') 
select stuff(replace(@x2, ' ', ''), 4, 0, ' ') 
select stuff(replace(@x3, ' ', ''), 4, 0, ' ') 
select stuff(replace(@x4, ' ', ''), 4, 0, ' ') 
select stuff(replace(@x5, ' ', ''), 4, 0, ' ') 

すべての出力は次のようになります同じ:123 456789