Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 你能把一个字符串字段变成一个表吗_Sql_Sql Server - Fatal编程技术网

Sql 你能把一个字符串字段变成一个表吗

Sql 你能把一个字符串字段变成一个表吗,sql,sql-server,Sql,Sql Server,我是新手,所以我的术语可能不太准确。对不起 好的,我引用了SQL中的一些表,它生成了这样一个表。我基本上理解它,你会看到参数列有一个字符串,其中一个列表由一个管道分隔|在=后面还有一个随机字母,我以后也需要对其进行排序 [附表][1] 该表随后用于某些报告软件 我的问题是,我可以将此参数字段拆分为每个参数和值吗?或者只选择我需要的特定参数,或者这是一个坏主意 这是我到目前为止的代码[SQL][2] 对不起,这是密码,我会把重点放在我要找的东西上 选择[零件][参数] 从[Parts]中我所能看

我是新手,所以我的术语可能不太准确。对不起

好的,我引用了SQL中的一些表,它生成了这样一个表。我基本上理解它,你会看到参数列有一个字符串,其中一个列表由一个管道分隔|在=后面还有一个随机字母,我以后也需要对其进行排序

[附表][1]

该表随后用于某些报告软件

我的问题是,我可以将此参数字段拆分为每个参数和值吗?或者只选择我需要的特定参数,或者这是一个坏主意

这是我到目前为止的代码[SQL][2]

对不起,这是密码,我会把重点放在我要找的东西上

选择[零件][参数]
从[Parts]中我所能看到的是,您选择了一列,这导致该列中出现大量文本。您可以将其导出到excel,并使用“文本到列”功能,将管道|作为分隔符,并使用等号=号。这将为每个|和=符号生成一个单独的列。

有许多拆分/解析示例可用。如果2016年,您可以使用String_Split

下面是一个串联示例

范例

返回


我认为这在纯sql中是不可能的-您使用的是什么数据库?例如,在SQL Server中,您可以创建一个表函数,该函数将以您希望的方式返回结果,但这是“Transact-SQL”。请将表描述和代码作为文本而不是图像发布示例数据,而不是屏幕截图,所需结果将非常有用。谢谢John,我尝试了,但出现了一个错误。我想不是2016@Shannon我提供的代码是2008-2016。你犯了什么错误?嗯,很有意思,可能是我做错了什么未知错误error@Shannon要在顶部清除,请选择-->A.ID Yes,我修改了这些字段
Select A.ID
      ,Item  = left(B.RetVal,charindex('=',B.RetVal+'=')-1)
      ,Value = right(B.RetVal,len(B.RetVal)-charindex('=',B.RetVal+'=')-1)
 From  YourTable A 
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace((Select replace(A.Parameters,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B
 -- YOUR OPTIONAL WHERE STATEMENT HERE  For example: Where A.ID=1