Допустим, у нас есть следующий сценарий
CREATE TABLE #Temp([Legal Name] NVARCHAR(MAX))
INSERT INTO #Temp ([Legal Name]) VALUES ('Beer Acme Co.')
INSERT INTO #Temp ([Legal Name]) VALUES ('Company of Brothers Co')
INSERT INTO #Temp ([Legal Name]) VALUES ('My Star Inc.')
INSERT INTO #Temp ([Legal Name]) VALUES ('Incredible Monsters INC')
INSERT INTO #Temp ([Legal Name]) VALUES ('Limit Is The Sky Ltd')
INSERT INTO #Temp ([Legal Name]) VALUES ('Limit Is The Universe Ltd.')
INSERT INTO #Temp ([Legal Name]) VALUES ('Unlimited Minds Limited.')
INSERT INTO #Temp ([Legal Name]) VALUES ('Unlimited Borders Limited')
Я могу предложить два способа попробовать вам помочь.
Вариант 1
Через скалярную функцию
CREATE FUNCTION [dbo].[GetClearedName](@VALUE NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @PATTERN NVARCHAR(MAX)
DECLARE @TEMP TABLE ([PATTERN] NVARCHAR(MAX))
INSERT INTO @TEMP ([PATTERN]) VALUES ('%Co.')
INSERT INTO @TEMP ([PATTERN]) VALUES ('% Co%')
INSERT INTO @TEMP ([PATTERN]) VALUES ('%Inc.')
INSERT INTO @TEMP ([PATTERN]) VALUES ('% Inc')
INSERT INTO @TEMP ([PATTERN]) VALUES ('% Ltd')
INSERT INTO @TEMP ([PATTERN]) VALUES ('%Ltd.')
INSERT INTO @TEMP ([PATTERN]) VALUES ('%Limited.')
INSERT INTO @TEMP ([PATTERN]) VALUES ('% Limited')
DECLARE @RESULT NVARCHAR(MAX)
SET @RESULT = @VALUE
DECLARE PATTERN_CURSOR CURSOR FOR SELECT [PATTERN] FROM @TEMP
OPEN PATTERN_CURSOR
FETCH NEXT FROM PATTERN_CURSOR INTO @PATTERN
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (PATINDEX(@PATTERN, @RESULT) > 0)
BEGIN
SET @RESULT = SUBSTRING(@RESULT, 0, PATINDEX(@PATTERN, @RESULT))
END
FETCH NEXT FROM PATTERN_CURSOR INTO @PATTERN
END
CLOSE PATTERN_CURSOR
DEALLOCATE PATTERN_CURSOR
IF (LEN(@RESULT) <> 0)
RETURN @RESULT
Return @VALUE
END
Вы можете использовать функцию следующим образом:
SELECT [dbo].[GetClearedName]([Legal Name]) FROM #Temp
DROP TABLE #Temp
Опция 2
Используя # SQL , также это можно преобразовать вфункция.
SELECT [Legal Name],
SQL#.RegEx_Replace4k(
SQL#.RegEx_Replace4k(
SQL#.RegEx_Replace4k(
SQL#.RegEx_Replace4k([Legal Name], N'(CO+\.|\sCO$)', N' ', -1, 1, 'IgnoreCase'),
N'(INC+\.|\sINC$)', N' ', -1, 1, 'IgnoreCase'),
N'(LTD+\.|\sLTD$)', N' ', -1, 1, 'IgnoreCase'),
N'(Limited+\.|\sLimited$)', N' ', -1, 1, 'IgnoreCase')
As [Cleared Name]
FROM
#Temp
DROP TABLE #Temp
Ожидаемые результаты