如何在SQL中拆分字符串并显示该值

如何在SQL中拆分字符串并显示该值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一列(a列),其值如下所示: ThisValue=The Value;DateFrom=01/01/01;Regulated=No; 我只想选择值(来自列A),并将其显示在子查询中 到目前为止,我已经尝试使用REPLACE,但很难让它在select语句中工作。使用SUBSTRING和CHARINDEX 查询 declare @str as varchar(50) set @str = 'ThisValue=The Value;DateFrom=01/01/01;Regulated=No;

我有一列(a列),其值如下所示:

ThisValue=The Value;DateFrom=01/01/01;Regulated=No;
我只想选择
值(来自列A),并将其显示在子查询中


到目前为止,我已经尝试使用
REPLACE
,但很难让它在
select
语句中工作。

使用
SUBSTRING
CHARINDEX

查询

declare @str as varchar(50)

set @str = 'ThisValue=The Value;DateFrom=01/01/01;Regulated=No;'

select substring(@str,charindex('=',@str,1)+1,
       ((charindex(';',@str,1))-(charindex('=',@str,1))-1));

要做到这一点,您需要有一个拆分器。我最喜欢的是从杰夫·摩登这里找到的

有些人不喜欢这个,因为它有一个varchar(8000)的限制。我从来没有需要解析任何长度接近这个长度的分隔字符串,所以它对我来说总是很好的

要更深入地了解具有许多不同选项的拆分器,您可以查看本文


有没有一种方法可以在不声明变量的情况下执行此操作?在一个子查询中,我想选择“ThisValue=the value”内的值;但在另一个子查询中,我想选择“Regulated=no”内的值;因此,例如:在一个子查询中,我只想选择另一个子查询中的“the value”,我只想选择“01/01/01”,而不是一个变量。您可以使用列名称也可以这样。如果您对数据库有任何控制权,则需要修复此问题。你在这里做噩梦。您实际上是将整行存储在一列中。“这非常需要正常化。”SeanLange现在你感觉到我的痛苦了。我百分之百支持你,我最难匹配表达式“ThisValue=”以解析它后面的内容,直到分隔符“;”。
declare @Something varchar(100) = 'ThisValue=The Value;DateFrom=01/01/01;Regulated=No;'

select max(case when y.ItemNumber = 1 then y.Item end) as DataName
    , max(case when y.ItemNumber = 2 then y.Item end) as DataValue
from dbo.DelimitedSplit8K(@Something, ';') x
cross apply dbo.DelimitedSplit8K(x.Item, '=') y
where x.Item > '' --This eliminates the trailing semicolon
group by x.ItemNumber
order by x.ItemNumber