我有一个带有文本列的表格,用于识别产品。但是在那个产品识别栏中,我需要在中间有一个数字用于数学运算。产品编号示例: AB12345-002-004 我想用连字符' - '。
之间的中间数字002进行数学运算我已经尝试过我遇到的分裂串功能,但它没有给我一行,它会返回多行。
这是我写的代码:
select (k.int_item_no), k.cust_item_id, cast(k.splitdata as bigint) pkqty
from
(
Select a.int_item_no, a.Cust_Item_ID, b.splitdata
from [dbo].[Item Cust] a
cross apply dbo.fnSplitString(a.cust_item_id, '-') as b
) k
返回如下行:(我需要12,14,12但却无法获得该行。)
SF12441 1479030-12 1479030
SF12441 1479030-12 12
LA52131 1479134-14-1 1479134
LA52131 1479134-14-1 14
LA52131 1479134-14-1 1
PA08225 1481392-012-002 1481392
PA08225 1481392-012-002 12
PA08225 1481392-012-002 2
以下是我尝试使用的功能(感谢任何人将其放在一起)。
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END