У меня есть строка '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
Пожалуйста помоги
SQL Server 2012


Вы можете попробовать следующий запрос.
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
Если вы хотите использовать существующую функцию 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 |
+--------+------+
версия sql-сервера