Sql 解析子查询中的拆分字符串

Sql 解析子查询中的拆分字符串,sql,sql-server,tsql,split,Sql,Sql Server,Tsql,Split,我在一个Microsoft SQL数据库中有两个表,其中一个表包含3个带分隔值的列(用逗号和/或斜杠分隔,但两者都应作为分隔符)。 然后,我有另一个表,其中包含一个ID,该ID与表1中拆分字符串中的每个项相同。 我想解析表1中的项目,以便显示表2中匹配行中的文本。 有没有办法做到这一点 表1 Text1 Text2 Text3 TA12,TA250 T1 TA12,TA250 T1 TA12,TA250 TA250,T

我在一个Microsoft SQL数据库中有两个表,其中一个表包含3个带分隔值的列(用逗号和/或斜杠分隔,但两者都应作为分隔符)。 然后,我有另一个表,其中包含一个ID,该ID与表1中拆分字符串中的每个项相同。 我想解析表1中的项目,以便显示表2中匹配行中的文本。 有没有办法做到这一点

表1

Text1           Text2           Text3
TA12,TA250      T1  
TA12,TA250      T1  
TA12,TA250      TA250,TA12      T310/T52
TA12,TA250      TA250           T310/T52
表2

TA12            Hello
TA250           World
T1              This is a Test
T310            You are
T52             a Hero
期望结果

Text1           Text2           Text3
Hello World     This is a Test  NULL
Hello World     This is a Test  NULL
Hello World     World Hello     You are a Hero
Hello World     World           You are a Hero

我可以使用C#实现这一点,但我更希望在SQL端实现这一点。

在最新版本的SQL Server中,您可以执行以下操作:

select t.*, t1.new_text1, t2.new_text2, t3.new_text3
from table1 t outer apply
     (select string_agg(t2.col2) as new_text1
      from table2 t2
      where t2.col1 in (select * from string_split(replace(t.text1, '/', ','), ','))
     ) t1 outer apply
     (select string_agg(t2.col2) as new_text2
      from table2 t2
      where t2.col1 in (select * from string_split(replace(t.text2, '/', ','), ','))
     ) t2 outer apply
     (select string_agg(t2.col2) as new_text3
      from table2 t2
      where t2.col1 in (select * from string_split(replace(1.text3, '/', ','), ','))
     ) t3;

也就是说,修复数据模型应该优先于尝试使用它。

永远不要将数据存储为逗号分隔的项。这只会给你带来很多麻烦。而且,字符串操作是高度特定于供应商的。我们需要知道您使用的rdbms和版本,才能有机会回答这个问题。@jarlh我当然不会这样做,但这是一个现有的数据库;)相信我,我可以对做这个的人大喊大叫(@a_horse_,没有名字,是Microsoft SQL,很抱歉…哪个版本?新版本有一个
split()
函数可能会很有用,但它可能会以错误的顺序产生结果。..string\u split不会保持原始项目的顺序。@Gordon Linoff,这很有效,非常感谢!它实际上将用于将所有现有数据从旧数据库传输到全新的规范化数据库,然后当然,我们不再在单个单元中放置任何阵列:)非常感谢大家的帮助!