如果你打算使用這種方法很多,在幾個不同的地方,然後創建一個標量函數,並做一個簡單的替換:
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
這是你在T-SQL中的正則表達式,而不使用CLR或互操作最接近的一次。
你到目前爲止嘗試過什麼?嘗試了'REPLACE'功能? http://technet.microsoft.com/en-us/library/ms186862.aspx – NickyvV
你使用$裏面的單詞嗎? (與**'$ test 3 sql ser $ ver'** - > result-> test 3 sql ser $ ver)相同 –