我想使用一些特殊字符修剪SQL Server字符串,例如“,,。?!; ,,,>< = +”。
SQL server ltrim和rtrim函数仅剥离空格字符。
DECLARE @Str NVARCHAR(100) = N',,,,,!؛Computation+Time, Cost،,.?!؛,،,><=+ـ'
SELECT dbo.SpecialTrim(@Str, N'،,.?!؛,،,><=+ـ')
The result : Computation+Time, Cost
为了实现SpecialTrim功能,有任何想法吗?
答案 0 :(得分:5)
以下硬编码模式。
它会查找不的第一个字符,其中一个字符要在两端排除。
要使其动态化,您可以使用字符串连接来构建字符集(注意在模式语法中包含特殊含义的字符)
WITH T(String) AS
(
SELECT 'Computation+Time, Cost،,.?!؛,،,><=+ـ' union all
SELECT ',,,,,!؛Computation+Time, Cost،,.?!؛,،,><=+ـ' union all
SELECT 'Computation+Time, Cost،,.?!؛,،,><=+ـ' union all
SELECT 'Computation+Time, Cost' union all
SELECT ''
)
SELECT SUBSTRING(String,Start,len(String) + 2 - Start - Finish)
FROM T
CROSS APPLY
(
SELECT PATINDEX('%[^،,.?!؛,،,><=+ـ]%' COLLATE Latin1_General_Bin,String),
PATINDEX('%[^،,.?!؛,،,><=+ـ]%' COLLATE Latin1_General_Bin,REVERSE(String))
)ca(Start, Finish)
答案 1 :(得分:1)
从 SQL Server vNext 开始,您可以使用内置的TRIM
功能:
<强> TRIM 强>
从字符串中删除空格或指定字符。
TRIM ( [ characters FROM ] string )
返回字符串参数类型的字符表达式,其中从两侧删除空格或指定字符。如果输入字符串为NULL,则返回NULL。
在你的情况下:
DECLARE @Str NVARCHAR(100) = N',,,,,!؛Computation+Time, Cost،,.?!؛,،,><=+ـ';
SELECT TRIM(N'،,.?!؛,،,><=+ـ' FROM @Str);