我有下面的数据
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
我只想在单词“ Trigger”之后提取所有数字。以下是我预期的结果。
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-结果仅采用第一个单词“ Trigger”之后的第一个数字
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 SQL2012。感谢大家的帮助。非常感谢。
问候
Adhi