首页 > 解决方案 > 如何获取包含在sql中逗号分隔值列中的数据

问题描述

我想传递一个 clm_id 并希望包含该 clm_id 的表中的数据像我传递 2012(clm_id) 并希望输出包含逗号分隔值的 2012 的数据。

我想要的是在第一个表中有重复的 clm_id 我想要 id 具有重复值的数据,包括逗号分隔值。

id     clm_id
1       2011,2012
2       2012,2013
3       2012

输出想要:

id    clm_id
1      2012
2      2012 
3      2012

像包含 2012 clm_id 的 id(1,2,3)

我有类似的查询, SELECT * FROM table1 WHERE ( clm_id in ('2012'))但没有从逗号分隔值中获取值

标签: sql-server

解决方案


使用喜欢(https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-2017)和案例(https:// docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017

WITH tmp (id, clm_id) AS
  (
  SELECT 1, '2011,2012'
  UNION
  SELECT 2, '2012,2013'
  UNION
  SELECT 3, '2012'
  )

SELECT 
tmp.id,
CASE
WHEN  tmp.clm_id LIKE '%2012%'
    THEN '2012'
ELSE ''
END AS clm_id
 FROM tmp

如果你有 SQL Server 2016 或更高版本,你可以使用一个漂亮的新功能:

  SELECT 
    id, cs.value       
   FROM tmp CROSS APPLY
   STRING_SPLIT(tmp.clm_id,',') cs
   WHERE cs.value='2012'

推荐阅读