SQL Patindex / Regex -匹配2个撇号之间小于等于4个字符



我有以下字符串:

'Siemens','Simatic','Microbox','PC','27','6ES7677AA200PA0','6ES7','677AA200PA0'

我想删除任何"条款"。少于5个字符。因此,在本例中,我想删除'PC', '27'和'6ES7'。

这将导致:

'Siemens','Simatic','Microbox','6ES7677AA200PA0','677AA200PA0'

这是在SQL server和我有一个函数,接受regex命令,到目前为止,它看起来像这样:

SELECT dbo.fn_StripCharacters(title, '/^''PC''$/')

我试图硬编码删除'PC',但我认为它删除了所有的撇号,' p '和'C'字符:

Siemens,Simati,Mirobox,,427B,6ES76477AA200A0,6ES7,6477AA200A0

这是我使用的函数:

CREATE FUNCTION [dbo].[fn_StripCharacters]
(
@String NVARCHAR(MAX), 
@MatchExpression VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SET @MatchExpression =  '%['+@MatchExpression+']%'

WHILE PatIndex(@MatchExpression, @String) > 0
SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1, '')

RETURN @String

END

如果您不关心过滤掉4个字符或更少的单词后保留的单词的特定顺序,则可以使用STRING_SPLITSTRING_AGG:

WITH cte AS (
SELECT id, value
FROM yourTable
CROSS APPLY STRING_SPLIT(val, ',')
)
SELECT id, STRING_AGG(value, ',') AS val
FROM cte
WHERE LEN(value) > 6
GROUP BY id;

演示

相关内容

  • 没有找到相关文章

最新更新