Если вы собираетесь использовать этот метод а много, в нескольких разных местах, а затем создать скалярную функцию и сделать простую замену:
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 SERVER $', но не заменит более 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 или Interop.
что вы пробовали? Пробовал функцию REPLACE? http://technet.microsoft.com/en-us/library/ms186862.aspx – NickyvV
Вы используете слово $ внутри? (так же, как ** '$ test 3 sql ser $ ver' ** -> result-> test 3 sql ser $ ver) –