2017-08-30 1 views

Antwort

2

Erstellen Sie diese Funktion:

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; 

Dann können Sie Ihr Feld wie folgt aktualisiert:

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

Ich würde:

  1. eine Split-Methode finden und ein Array/table bauen. Und schafft eine zweite Array/table
  2. iterieren 1 bis n (Basis 0)
  3. wenn jedes Element eine Zahl ist und die vorherige ist eine Anzahl kombiniere sie
  4. Merge neue Array in einem neuen String

Ich würde dies in meiner Anwendung tun, anstatt T-SQL. Es wird einfacher, einfacher und kürzerer Weg zu gehen.

+0

Danke, aber ich kann das nur – Federico

+1

OK mit SQL tun - ich werde versuchen zu helfen – HGMamaci

+0

Hinzugefügt als neue Vollantwort - Viel Glück – 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

Ausgabe ist: q 121412422 Test 1 Testwiederholung – HGMamaci

Verwandte Themen