SQL 2005中的TSQL:查询

dcp*_*ers 3 sql t-sql sql-server csv sql-server-2005

我的表中有2列,名为TaskSetSkillsSelected.

样本数据如下:

TaskSet                        | SkillsSelected
--------------------------------------------------
SK000001, SK000004, SK000002   | SK000001, SK000002, SK000003
SK000002                       | SK000002, SK000003, SK000004
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它使用逗号分隔数据.我想要一个查询,它将给我的记录不是来自TaskSet中不存在的SkillsSelected,所以在这种情况下将返回:

SK000003 
SK000003, SK000004
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 6

在SQL Server中处理逗号分隔列表的最佳方法是创建一个返回表类型的UDF.请参阅此链接了解详情.MS文档声称CLR UDF更快,但这里是使用中两个选项的实际比较.

一旦到位,您可以使用:

SELECT t.*
  FROM TABLE t
 WHERE EXISTS(SELECT value 
                FROM dbo.split(t.taskset)
              INTERSECT
              SELECT value 
                FROM dbo.split(t.skillsselected))
Run Code Online (Sandbox Code Playgroud)

参考:

  • @David:找到一个比较:http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/split-string-in-sql-server-2005-clr-vs-t (2认同)