Как я могу сохранить значения в переменных, которые я разделил из строки? - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь сохранить значения в переменной из строки, которую я разделил, но я получаю Null каждый раз, когда выбираю имя переменной.Я попробовал это:

DECLARE @MyString varchar(200)
DECLARE @FldName1 varchar(100), @FldName2 varchar(100), @FldName3 varchar(100),
        @FldVal1 varchar(100), @FldVal2 varchar(100), @FldVal3 varchar(100)

SET @MyString = 'Name1 Am Name2 Chin Name3 Fina'

select @FldName1=(parsename(replace(@MyString,' ','.'),6)),
       @FldVal1=(parsename(replace(@MyString,' ','.'),5)),
       @FldName2=(parsename(replace(@MyString,' ','.'),4)),
       @FldVal2=(parsename(replace(@MyString,' ','.'),3)),
       @FldName3=(parsename(replace(@MyString,' ','.'),2)),
       @FldVal3=(parsename(replace(@MyString,' ','.'),1))

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

TSQL PARSENAME применимо только для объектов sql ([DBName].[schema].[table]), поэтому он работает только для 3 строк.

parsename('dbo.tablename',1) will result to 'dbo'

Вы можете поиграть с помощью string_split()

select * from string_split(@MyString, ' ')
0 голосов
/ 27 сентября 2019

Если вы используете SQL Server 2016+, вы можете попробовать использовать другой подход, основанный на анализе действительного текста JSON.Вам необходимо преобразовать ваши входные данные в действительный массив JSON ('Name1 Am Name2 Chin Name3 Fina' преобразуется в '["Name1","Am","Name2","Chin","Name3","Fina"]'), а затем использовать JSON_VALUE(), чтобы получить значение для указанного элемента в этом массиве.Обратите внимание, что массивы JSON начинаются с нуля.

Statemnent:

DECLARE @MyString varchar(200)
DECLARE @FldName1 varchar(100), @FldName2 varchar(100), @FldName3 varchar(100),
        @FldVal1 varchar(100), @FldVal2 varchar(100), @FldVal3 varchar(100)
SET @MyString = 'Name1 Am Name2 Chin Name3 Fina'

SELECT @MyString = CONCAT('["', REPLACE(@MyString, ' ', '","'), '"]')
SELECT
   @FldName1 = JSON_VALUE(@MyString, '$[5]'),
   @FldVal1  = JSON_VALUE(@MyString, '$[4]'),
   @FldName2 = JSON_VALUE(@MyString, '$[3]'),
   @FldVal2  = JSON_VALUE(@MyString, '$[2]'),
   @FldName3 = JSON_VALUE(@MyString, '$[1]'),
   @FldVal3  = JSON_VALUE(@MyString, '$[0]')
SELECT @FldName1, @FldVal1, @FldName2, @FldVal2, @FldName3, @FldVal3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...