Разделить одно значение на основе двух разделителей в SQL Server

У меня есть строка '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-сервера

Zaynul Abadin Tuhin 14.02.2019 08:09

SQL Server 2012

Rahul Aggarwal 14.02.2019 08:10
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете попробовать следующий запрос.

   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 |
+--------+------+

Другие вопросы по теме