Sql 如何将值存储在从字符串拆分的变量中?

Sql 如何将值存储在从字符串拆分的变量中?,sql,sql-server,Sql,Sql Server,我试图将拆分字符串中的值存储在变量中,但每次选择变量名时都会得到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 = 'N

我试图将拆分字符串中的值存储在变量中,但每次选择变量名时都会得到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))
TSQL只适用于sql对象
([DBName].[schema].[table])
,这就是为什么它只适用于3个字符串的原因

parsename('dbo.tablename',1) will result to 'dbo'
您可以使用
string\u split()

TSQL只适用于sql对象
([DBName].[schema].[table])
,这就是为什么它只适用于3个字符串的原因

parsename('dbo.tablename',1) will result to 'dbo'
您可以使用
string\u split()


如果您使用SQL Server 2016+,您可以基于解析有效的
JSON
文本,尝试一种不同的方法。您需要将输入数据转换为有效的
JSON
数组(
'Name1 Am Name2 Chin Name3 Fina'
转换为
'[“Name1”、“Am”、“Name2”、“Chin”、“Name3”、“Fina”]'
),然后使用
JSON_VALUE()
获取此数组中指定项的值。请注意,
JSON
数组是基于零的

声明:

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

如果您使用SQL Server 2016+,您可以基于解析有效的
JSON
文本,尝试一种不同的方法。您需要将输入数据转换为有效的
JSON
数组(
'Name1 Am Name2 Chin Name3 Fina'
转换为
'[“Name1”、“Am”、“Name2”、“Chin”、“Name3”、“Fina”]'
),然后使用
JSON_VALUE()
获取此数组中指定项的值。请注意,
JSON
数组是基于零的

声明:

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

您使用的是哪个版本的SQL Server?v17.6。我尝试了3个字符串,它成功了,但在这个例子中,它不起作用。我不知道为什么。@VinaChan v17.6可能是SQL Server Management Studio的版本。您的SQL Server版本是什么?您使用的SQL Server版本是什么?v17.6。我尝试了3个字符串,它成功了,但在这个例子中,它不起作用。我不知道为什么。@VinaChan v17.6可能是SQL Server Management Studio的版本。您的SQL Server版本是什么?
STRING\u SPLIT
的问题是,它会生成一组(无序的)记录作为其输出。这意味着OP可能无法控制每个组件存储在哪个变量中。是的,我同意@TimBiegeleisen的观点,OP可能会使用掩蔽来检查哪个是[key]和[value],如果使用string_split,比如“Name%”,但问题是如何连接与此[key]相关的值,除非OP将value='Name1-Am'@TimBiegeleisen赋值,否则我同意。我需要将值存储在变量中。
STRING\u SPLIT
的问题是它生成一组(无序的)记录作为其输出。这意味着OP可能无法控制每个组件存储在哪个变量中。是的,我同意@TimBiegeleisen的观点,OP可能会使用掩蔽来检查哪个是[key]和[value],如果使用string_split,比如“Name%”,但问题是如何连接与此[key]相关的值,除非OP将value='Name1-Am'@TimBiegeleisen赋值,否则我同意。我需要将这些值存储在变量中。