후에 나타납니다
DECLARE @InputString varchar(100), @pos int, @result varchar(100);
SET @InputString = 'a2t1y';
SET @result = @InputString;
SET @pos = PATINDEX('%[0-9]%', @result);
WHILE @pos <> 0 BEGIN
SET @result = STUFF(@result, @pos, 1, SPACE(SUBSTRING(@result, @pos, 1)));
SET @pos = PATINDEX('%[0-9]%', @result);
END
SELECT @result;
출력 :
---------------------
a t y
01
ab[space][space]e
같은 문자열로
ab2e
문자열 등을 확대하기위한 용액은, 여기에 가능한 해결책
CREATE FUNCTION ExpandString (@String varchar(100))
RETURNS varchar(100)
AS BEGIN
DECLARE @pos int, @result varchar(100);
SET @result = @String;
SET @pos = PATINDEX('%[0-9]%', @result);
WHILE @pos <> 0 BEGIN
SET @result = STUFF(@result, @pos, 1, SPACE(SUBSTRING(@result, @pos, 1)));
SET @pos = PATINDEX('%[0-9]%', @result);
END
RETURN @result;
END
그래서이 같은 열을 호출 할 수 있습니다 : 23,516,
그것은 아마 좋은 생각이 함수로 구현하는 것입니다
SELECT …, dbo.ExpandString(t.SomeColumn), …
그것은 주목해야한다
하지만, 그이 솔루션은 한자리의 '매크로'만 지원합니다. 즉, a12b
은이 기능을 사용하여 a[1 space][2 spaces]b
으로 변환됩니다. 이는 반드시 기대했던 것만은 아닙니다. 이 아닌 수치 사이의 숫자의 순서로 정수를 인식 할 필요하면 그래서, 여기에 대체 솔루션입니다 :
CREATE FUNCTION ExpandString (@String varchar(100))
RETURNS varchar(100)
AS BEGIN
DECLARE @pos int, @lastpos int, @len int, @isnum bit,
@sub varchar(100), @result varchar(100);
SET @result = '';
SET @pos = 1;
SET @len = LEN(@String);
SET @isnum = ISNUMERIC(SUBSTRING(@String, @pos, 1));
WHILE @pos <= @len BEGIN
SET @lastpos = @pos;
WHILE @pos <= @len AND ISNUMERIC(SUBSTRING(@String, @pos, 1)) = @isnum
SET @pos = @pos + 1;
SET @sub = SUBSTRING(@String, @lastpos, @pos - @lastpos);
SET @result = @result + CASE @isnum WHEN 1 THEN SPACE(@sub) ELSE @sub END;
SET @isnum = @isnum^1;
END;
RETURN @result;
END
두 버전 모두 시작과 입력 문자열의 끝에서 두 숫자를 인식.
데이터 집합이있는 경우에만 세트 기반 방식으로 작업 할 수 있습니다 (예 : 많은 행의 데이터. 문자열 조작 ** ** ** set-based operation이 아니며 SQL Server가별로 좋지 않습니다. –
이 TSQL 문제를 http://beyondrelational.com/puzzles/tsql/에서 봐야한다고 생각합니다. 58/korean/playing-chess-in-tsql-part-1.aspx. 그 문제에 대한 최선의 해결책은 도전이 끝났을 때 출판 될 것입니다. 아마도 당신이 사용할 수있는 무엇인가. –
@Mikael : OP가 이미 알고 있다고 확신합니다. (http://stackoverflow.com/questions/6304734/doubt-in-creating-a-sierpinsk-carpet-using-tsql-set-based) with 그 사이트. –