SQL Serverで空白(または任意の文字)を削除するために文字列を更新する場合が2つの数字の間にある場合は、それを更新します。2つの数字の間にスペースがある場合にのみ、スペースを削除できますか?
入力:
q 12 1 4 12422 test 1 testagain
予想される出力:
q 121412422 test 1 testagain
そうする任意のエレガントな方法はありますか?
ありがとうございました!
SQL Serverで空白(または任意の文字)を削除するために文字列を更新する場合が2つの数字の間にある場合は、それを更新します。2つの数字の間にスペースがある場合にのみ、スペースを削除できますか?
入力:
q 12 1 4 12422 test 1 testagain
予想される出力:
q 121412422 test 1 testagain
そうする任意のエレガントな方法はありますか?
ありがとうございました!
この関数を作成します。
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);
私はなります
私はT-SQLではなくアプリケーションでこれを行います。より簡単に、より簡単に、そしてより短い道に進むことができます。
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
出力は:q 121412422テスト1 testagain – HGMamaci
おかげで、私は唯一のSQL – Federico
OKを使用してこれを行うことができます - 私がお手伝いします – HGMamaci
新しいフル回答として追加されました - 幸運 – HGMamaci