如何在 SQL 服务器中使用预定义的特殊字符 trim 字符串?

How to trim string using predefined special characters in SQL Server?

我想 trim SQL 服务器字符串使用一些特殊字符,例如 "Ì,.?!؛,Ì,><=+ـ"。

SQL 服务器 ltrim 和 rtrim 函数仅去除 space 个字符。

DECLARE @Str NVARCHAR(100) = N',,,,,!؛Computation+Time, Cost،,.?!؛,،,><=+ـ'
SELECT dbo.SpecialTrim(@Str, N'،,.?!؛,،,><=+ـ')

The result : Computation+Time, Cost

有没有人有任何想法来实现 SpecialTrim 功能?

下面对模式进行了硬编码。

它会查找 不是 两端要排除的字符之一的第一个字符。

要使其动态化,您可以使用字符串连接建立字符集(注意模式语法中包含特殊含义的字符)

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)

来自 SQL 服务器 vNext 以及您可以使用内置 TRIM 函数:

TRIM

Removes white spaces or specified characters from a string.

TRIM ( [ characters FROM ] string ) 

Returns a character expression with a type of string argument where white spaces or specified characters are removed from both sides. Returns NULL if input string is NULL.

你的情况:

DECLARE @Str NVARCHAR(100) = N',,,,,!؛Computation+Time, Cost،,.?!؛,،,><=+ـ';
SELECT TRIM(N'،,.?!؛,،,><=+ـ' FROM @Str);