Sql 如何将值存储在从字符串拆分的变量中?
我试图将拆分字符串中的值存储在变量中,但每次选择变量名时都会得到Null。我试过这个: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
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赋值,否则我同意。我需要将这些值存储在变量中。