如果给定字符串匹配,我有一些方法可以删除字符串的第一个和最后一个字母。在这种情况下,字符串为$
。
示例:
$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 1 sql server
test 2 sql server
test 3 sql server
test 4 sql server
test 5 sql server
test 6 sql server
答案 0 :(得分:1)
首先用''替换'$ $',然后用''替换'$'。 你在哪里说:用空格替换,但在你的结果中没有空格所以我用空字符串替换它们。您可以根据自己的需要进行修改。 所以这个:
SELECT REPLACE(REPLACE(YourColumn, '$ $', ''),'$','')
FROM YourTable
答案 1 :(得分:1)
您的数据
DECLARE @TABLE TABLE (Value VARCHAR(100))
INSERT INTO @TABLE VALUES
('$test 1 sql server$'),
('$ $test 2 sql server'),
('$test 3 sql server$ '),
('$test 4 sql server'),
('test 5 sql server'),
('$test 6 sql server')
查询
SELECT RTRIM(LTRIM(REPLACE(Value, '$', ''))) AS Fixed
FROM @TABLE
WHERE LEFT(LTRIM(Value), 1) = '$'
OR RIGHT(LTRIM(Value), 1) = '$'
结果集
╔════════════════════╗
║ Fixed ║
╠════════════════════╣
║ test 1 sql server ║
║ test 2 sql server ║
║ test 3 sql server ║
║ test 4 sql server ║
║ test 6 sql server ║
╚════════════════════╝
答案 2 :(得分:0)
您可以使用Stuff功能 将$替换为''
答案 3 :(得分:0)
试试这个
SELECT REPLACE('$test 1 sql server$','$','');
答案 4 :(得分:0)
您可以用''替换$但在这个不起作用的例子中:
test 3 sql ser$ver$ $
但是这个算法运行良好:
DECLARE @in NVARCHAR(MAX)
DECLARE @out NVARCHAR(MAX)
SET @in=' test 3 sql server$ $'
SET @out=''
DECLARE @separator NCHAR(1)
SET @separator=' '
DECLARE @position int
SET @position = 1
SET @in = @in + @separator
WHILE charindex(@separator,@in,@position) <> 0
BEGIN
DECLARE @word NVARCHAR(MAX)
SET @word = substring(@in, @position, charindex(@separator,@in,@position) - @position)
IF (LEN(@Word)=1 AND @Word='$') SET @Word=''
ELSE
BEGIN
IF (SUBSTRING(@Word,1,1)='$') SET @Word=SUBSTRING(@Word,2,LEN(@word))
IF (SUBSTRING(@Word,LEN(@word),1)='$') SET @Word=SUBSTRING(@Word,1,LEN(@word)-1)
END
SET @out=@out+@separator+@word
SET @position = charindex(@separator,@in,@position) + 1
END
SELECT @out
答案 5 :(得分:0)
如果您要在几个不同的地方使用这种方法,那么创建一个标量函数,并做一个简单的替换:
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
这也适用于'$ test $ 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
这是您在不使用CLR或互操作的情况下最接近T-SQl中的正则表达式。