Извлечь числовое после определенного слова - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть данные ниже

Outcome
----------

Trigger 1 and Trigger 2 and Trigger 3 and Case 1119999. Case assesor confirm.
Trigger 1, Trigger 2, Trigger 3
Trigger 1, and Trigger 2, Case 2849458347, and Trigger3 year 2018
Case 11333232

Я бы хотел извлечь все числа только после слова «Триггер». Ниже приведен результат, которого я ожидал.

Outcome
-----------------
NULL
1 2 3
1 2 3
1 2 3
NULL

Я перепробовал 2 функции, и они обе не работают. Ниже я попробовал.

Функция 1 - В результате принимают все числа

ALTER FUNCTION [dbo].[UDF_GetNumeric]
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END


SELECT dbo.udf_GetNumeric('') AS A;
SELECT dbo.udf_GetNumeric('Trigger 1 and Trigger 2 and Trigger 3 and Case 1119999. Case assesor confirm.') AS B;
SELECT dbo.udf_GetNumeric('Trigger 1, Trigger 2, Trigger 3') AS C;
SELECT dbo.udf_GetNumeric('Trigger 1, and Trigger 2, Case 2849458347, and Trigger3 year 2018') AS D;
SELECT dbo.udf_GetNumeric('Case 11333232') AS E;

Функция 2 - Результат занимает только первое число после первого слова «Триггер»

ALTER FUNCTION [dbo].[ExtractTriggerNumber]
(
    @FieldText varchar(1000)    
)
RETURNS varchar(50)
AS
BEGIN

    declare @Result varchar(100)--decimal(12, 3);

    declare @Trigger varchar(100) = 'Trigger '
    declare @temp1 varchar(100)
    declare @temp2 varchar(100)

    set @temp1 =    SUBSTRING(@FieldText, PATINDEX('%' + @Trigger +'[0-9]%', @FieldText) + LEN(@Trigger), 
                    LEN(@FieldText)
                    - PATINDEX('%' + @Trigger +'[0-9]%', @FieldText) + LEN(@Trigger))
    set @temp2 =   RTRIM(LEFT(LTRIM(@temp1), CHARINDEX(' ', LTRIM(@temp1), 1)))

    set @temp2 = IIF(@temp2 LIKE '[0-9]%', @temp2, NULL)

    set @temp2 = left(@temp2, 1)

    set @Result = @temp2

    RETURN @Result;
END

SELECT [dbo].[ExtractTriggerNumber]('') AS A;
SELECT [dbo].[ExtractTriggerNumber]('Trigger 1 and Trigger 2 and Trigger 3 and Case 1119999. Case assesor confirm.') AS B;
SELECT [dbo].[ExtractTriggerNumber]('Trigger 1, Trigger 2, Trigger 3') AS C;
SELECT [dbo].[ExtractTriggerNumber]('Trigger 1, and Trigger 2, Case 2849458347, and Trigger3 year 2018') AS D;
SELECT [dbo].[ExtractTriggerNumber]('Case 11333232') AS E;

Я использую Microsoft SQL 2012. Спасибо всем за помощь. Очень ценится

С уважением,

Adhi

...