2017-08-30 9 views
-1

SQL Serverで空白(または任意の文字)を削除するために文字列を更新する場合が2つの数字の間にある場合は、それを更新します。2つの数字の間にスペースがある場合にのみ、スペースを削除できますか?

入力:

q 12 1 4 12422 test 1 testagain 

予想される出力:

q 121412422 test 1 testagain 

そうする任意のエレガントな方法はありますか?

ありがとうございました!

答えて

2

この関数を作成します。

CREATE FUNCTION [dbo].[RemoveSpaceBetweenNumbers] (@str varchar(max)) 
RETURNS varchar(max) 
BEGIN 

WHILE PATINDEX('%[0-9] [0-9]%',@str) > 0 
    BEGIN 
     SET @str = STUFF(@str, PATINDEX('%[0-9] [0-9]%',@str)+1,1,'') 
    END; 

    RETURN @str; 
END; 

その後、あなたはこのようなあなたのフィールドを更新することができます。

UPDATE YourTable SET YourColumn=dbo.RemoveSpaceBetweenNumbers(YourColumn); 
0

私はなります

  1. は、分割方法を見つけて、配列/テーブルを構築します。各項目は、番号と以前であればnは1から
  2. 反復(ベース0)
  3. を二番目の配列/テーブルを作成する数は、それらをマージさ
  4. は、新しい文字列に
を新しい配列をマージ

私はT-SQLではなくアプリケーションでこれを行います。より簡単に、より簡単に、そしてより短い道に進むことができます。

+0

おかげで、私は唯一のSQL – Federico

+1

OKを使用してこれを行うことができます - 私がお手伝いします – HGMamaci

+0

新しいフル回答として追加されました - 幸運 – HGMamaci

1
declare @str varchar(max)='q 12 1 4 12422 test 1 testagain' 

declare @T table (item varchar(500) not null) 
declare @d varchar(10) 
set @d = ' ' 
declare @start int 
declare @len int 
declare @pos int 
declare @pos1 int 
declare @val varchar(500) 
set @pos = 1 
Set @start = charindex(@d,@str,@pos) 
Set @len = len(@str) 
While @start <= @len 
begin 
    if (@pos = 1) 
    begin 
     set @val = substring(@str,1,@start-1) 
     insert into @T values(@val) 
     set @pos = @pos + 1 
    end 
    else 
    begin 
     Set @pos1 = charindex(@d,@str,@start+1) 
     if @pos1 = 0 
     begin 
       set @val = substring(@str,@start+1,@[email protected]) 
      insert into @T values(@val) 
      break; 
     end 
     set @val = substring(@str,@start+1,@[email protected]) 
     insert into @T values(@val) 
     set @start = @pos1 
     set @pos1 = 0 
    end 
end 


DECLARE @OUTPUT VARCHAR(MAX), @previtem varchar(500), @item varchar(500) 

DECLARE CRS CURSOR FOR 
SELECT item FROM @T 

OPEN CRS 

FETCH NEXT FROM CRS INTO @previtem 
SET @[email protected] 
WHILE (@@fetch_status = 0) 
BEGIN 
    FETCH NEXT FROM CRS INTO @item 
    IF (@item<>@previtem) 
    BEGIN 
     IF (ISNUMERIC(@item)=1 AND ISNUMERIC(@previtem)=1) 
      SET @OUTPUT = @OUTPUT + @item 
     ELSE 
      SET @OUTPUT = @OUTPUT + ' ' + @item 
    END 
    SET @[email protected] 
END 

CLOSE CRS 
DEALLOCATE CRS 

select @OUTPUT 
select * from @T 
+0

出力は:q 121412422テスト1 testagain – HGMamaci

関連する問題