이 방법 A를 사용하려고하는 경우
IF OBJECT_ID (N'dbo.StripTokens', N'FN') IS NOT NULL
DROP FUNCTION dbo.StripTokens;
GO
CREATE FUNCTION dbo.StripTokens (@string VARCHAR(MAX), @token CHAR(1))
RETURNS VARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @outputString VARCHAR(MAX)
SET @outputString = REPLACE(@string, @token, '')
SET @outputString = REPLACE(@outputString, ' ', ' ')
SET @outputString = RTRIM(LTRIM(@outputString))
RETURN(@outputString);
END;
그리고 사용을 :
를 많이, 몇 가지 다른 장소에서, 다음 대체 단순한를 스칼라 함수를 작성하고, 할
PRINT dbo.StripTokens('$test 1 sql server$', '$')
PRINT dbo.StripTokens('$ $test 2 sql server', '$')
PRINT dbo.StripTokens('test 3 sql server$ $', '$')
PRINT dbo.StripTokens('$test 4 sql server', '$')
PRINT dbo.StripTokens('test 5 sql server', '$')
PRINT dbo.StripTokens('$test 6 sql server', '$')
생산 어떤 :
test 1 sql server
test 2 sql server
test 3 sql server
test 4 sql server
test 5 sql server
test 6 sql server
이것은 또한 '$ 테스트 $ (7) SQL 서버 $'에 대한 작동하지만 2 개 이상 복수의 공백을 대체하지 않습니다 :
PRINT dbo.StripTokens('$test $7 sql server$', '$')
PRINT dbo.StripTokens('$test $ $8 sql server', '$')
결과 :
test 7 sql server
test 8 sql server
여러 공백을 바꾸려면 다음과 같은 루프를 만들어야합니다. PATINDEX를 사용하여 나머지 이중 공간이 있는지 확인합니다.
IF OBJECT_ID (N'dbo.StripTokens', N'FN') IS NOT NULL
DROP FUNCTION dbo.StripTokens;
GO
CREATE FUNCTION dbo.StripTokens (@string VARCHAR(MAX), @token CHAR(1))
RETURNS VARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @outputString VARCHAR(MAX)
SET @outputString = REPLACE(@string, @token, '')
WHILE(1 = 1)
BEGIN
IF PATINDEX('% %', @outputString) > 0
BEGIN
SET @outputString = REPLACE(@outputString, ' ', ' ')
END
ELSE
BREAK
END
SET @outputString = RTRIM(LTRIM(@outputString))
RETURN(@outputString);
END;
GO
PRINT dbo.StripTokens('$test 1 sql server$', '$')
PRINT dbo.StripTokens('$ $test 2 sql server', '$')
PRINT dbo.StripTokens('test 3 sql server$ $', '$')
PRINT dbo.StripTokens('$test 4 sql server', '$')
PRINT dbo.StripTokens('test 5 sql server', '$')
PRINT dbo.StripTokens('$test 6 sql server', '$')
PRINT dbo.StripTokens('$test $7 sql server$', '$')
PRINT dbo.StripTokens('$test $ $8 sql server', '$')
반환 :
test 1 sql server
test 2 sql server
test 3 sql server
test 4 sql server
test 5 sql server
test 6 sql server
test 7 sql server
test 8 sql server
이 말은 CLR 또는 상호 운용성을 사용하지 않고 T-SQL에서 정규 표현식에 도착 가장 가까운 여기에 사용할 수있는이 기능과 동일한 기능입니다.
지금까지 해보신 것은 무엇입니까? 'REPLACE' 기능을 시도 했습니까? http://technet.microsoft.com/en-us/library/ms186862.aspx – NickyvV
단어 내부에 $를 사용합니까? (** '$ test 3 sql ser $ ver'** -> result-> test 3 sql ser $ ver와 동일) –