我想将文本从以下内容拆分为给定格式。
我的字符串格式为id,quantity|id,quantity|id,quantity
实施例:1,3|2,4|3,6|4,0
我想用以下格式:
Id | Quantity
1 | 3
2 | 4
3 | 6
4 | 0
我需要完全查询以获得上述结果:
答案如下
IF EXISTS ( SELECT * from dbo.sysobjects WHERE id = object_id(N'[dbo].[doubleSplit]')
AND OBJECTPROPERTY(id, N'IsTableFunction') = 1 )
DROP FUNCTION [dbo].[doubleSplit] GO
CREATE FUNCTION dbo.doubleSplit (
@sourceString varchar(MAX),
@primaryDelimiter varchar(100),
@secondaryDelimiter varchar(100) ) RETURNS @tblArray TABLE (
Id smallint IDENTITY(1,1),
InventoryId varchar(MAX),
Quantity varchar(MAX) ) AS BEGIN
DECLARE @primaryIndex smallint
DECLARE @secondaryIndex smallint
DECLARE @primaryStart smallint
DECLARE @secondaryStart smallint
DECLARE @primaryDelimiterSize smallint
DECLARE @seondaryDelimiterSize smallint
DECLARE @primaryElement varchar(MAX);
DECLARE @seondaryElement varchar(MAX);
SET @primaryDelimiterSize = LEN(@primaryDelimiter)
SET @seondaryDelimiterSize = LEN(@secondaryDelimiter)
--loop through source string and add elements to destination table array
WHILE LEN(@sourceString) > 0
BEGIN
SET @primaryIndex = CHARINDEX(@primaryDelimiter, @sourceString)
IF @primaryIndex = 0
BEGIN
SET @secondaryIndex = CHARINDEX(@secondaryDelimiter, @sourceString)
IF @secondaryIndex = 0
BEGIN
INSERT INTO @tblArray (InventoryId, Quantity) VALUES(@sourceString, '')
END
ELSE
BEGIN
SET @secondaryStart = @secondaryIndex + @seondaryDelimiterSize;
INSERT INTO @tblArray (InventoryId, Quantity)
VALUES(SUBSTRING(@sourceString, 1, @secondaryIndex - 1),
SUBSTRING(@sourceString, @secondaryIndex + @seondaryDelimiterSize, LEN(@sourceString) - @secondaryStart + 1))
END
BREAK
END
ELSE
BEGIN
SELECT @primaryElement = SUBSTRING(@sourceString, 1, @primaryIndex - 1);
SET @secondaryIndex = CHARINDEX(@secondaryDelimiter, @primaryElement)
SET @secondaryStart = @secondaryIndex + @seondaryDelimiterSize;
INSERT INTO @tblArray (InventoryId, Quantity)
VALUES(SUBSTRING(@primaryElement, 1, @secondaryIndex - 1),
SUBSTRING(@primaryElement, @secondaryIndex + @seondaryDelimiterSize, LEN(@primaryElement) - @secondaryStart + 1))
SET @primaryStart = @primaryIndex + @primaryDelimiterSize
SET @sourceString = SUBSTRING(@sourceString, @primaryStart , LEN(@sourceString) - @primaryStart + 1)
END
END
RETURN END GO
SELECT Id,Quantity FROM dbo.doubleSplit('1,3|2,4|3,6|4,0|','|',',')