我有一个字符串'100029 | 0.00,120035 | 0.00,120083 | 0.00'。 我需要将其拆分两次 首先,我基于逗号将其分离并保存在表中。 然后我想基于'|'进行拆分再次签名。不明白我该怎么做。 我不想使用While循环。 我的代码
DECLARE @tab TABLE (appinv VARCHAR(200))
DECLARE @tab1 TABLE (app VARCHAR(200), inv varchar(200))
INSERT INTO @tab
select Data from dbo.SplitString('100029|0.00,120035|0.00,120083|0.00',',')
select appinv from @tab
我想要的输出是
INSERT INTO @tab1 VALUES('100029',0.00),('120035',0.00),('120083',0.00)
select * from @tab1
请帮助
答案 0 :(得分:3)
您可以尝试以下查询。
DECLARE @tab TABLE (app VARCHAR(200), inv varchar(200))
INSERT INTO @tab
SELECT SUBSTRING(Data,0,PATINDEX('%|%',Data)),
SUBSTRING(Data,PATINDEX('%|%',Data)+1,len(Data)) from
dbo.SplitString('100029|0.00,120035|0.00,120083|0.00',',')
SELECT * FROM @tab
答案 1 :(得分:1)
如果您想使用现有的dbo.SplitString
函数,在这种情况下,您可以尝试执行以下操作。
INSERT INTO @tab1
SELECT LEFT(data, Charindex('|', data) - 1) AS LeftPart,
RIGHT(data, Charindex('|', Reverse(data)) - 1) AS RightPart
FROM (SELECT data
FROM dbo.Splitstring('100029|0.00,120035|0.00,120083|0.00', ','))T
也可以像没有SplitString
函数的情况那样进行操作。
DECLARE @tab1 TABLE
(
app VARCHAR(200),
inv VARCHAR(200)
)
DECLARE @xml AS XML,
@str AS VARCHAR(100)
SET @str='100029|0.00,120035|0.00,120083|0.00'
SET @xml = Cast(( '<X>' + Replace(@str, ',', '</X><X>') + '</X>' ) AS XML)
INSERT INTO @tab1
SELECT LEFT(value, Charindex('|', value) - 1) AS LeftPart,
RIGHT(value, Charindex('|', Reverse(value)) - 1) AS RightPart
FROM (SELECT n.value('.', 'varchar(100)') AS value
FROM @xml.nodes('X') AS T(n))T
SELECT *
FROM @tab1
输出
+--------+------+
| app | inv |
+--------+------+
| 100029 | 0.00 |
+--------+------+
| 120035 | 0.00 |
+--------+------+
| 120083 | 0.00 |
+--------+------+