如何使用SQL Server中的预定义特殊字符修剪字符串?

时间:2016-02-18 15:35:40

标签: sql sql-server string trim

我想使用一些特殊字符修剪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功能,有任何想法吗?

2 个答案:

答案 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);