У меня есть данные ниже
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