如何获取SQL中逗号分隔值列中包含的数据

时间:2018-09-20 11:20:38

标签: sql-server

我想传递一个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')),但无法从逗号分隔的值中获取价值

4 个答案:

答案 0 :(得分:1)

使用like(https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-2017)和case(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'

答案 1 :(得分:0)

简单的LIKE查询将起作用。 Check here

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "C:\\xampp\\php"
    SetEnv PHPRC "C:\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

上面的代码将返回经过过滤的查询,如果您只想将搜索参数作为选择列,为什么不能简单呢?

select id, clm_id from test where clm_id like '%2012%'

无论如何,正如GuidoG所建议的,您需要稍作更改。

答案 2 :(得分:0)

String_Split是为此任务提供的最新内置函数

select
    id, t.[value] as clm_id
from CLM
cross apply STRING_SPLIT(clm_id,',') as t
where [value] = '2012'

答案 3 :(得分:0)

您可以尝试以下方法:

    declare @YourTable TABLE (id int,clm_id varchar(50))

    INSERT @YourTable SELECT 1,'2011,2012'
    INSERT @YourTable SELECT 2,'2012,2013'
    INSERT @YourTable SELECT 3,'2012'

    declare @SearchYear char(4)='2012' -- input search value

    SELECT 
    id 
    ,@SearchYear AS [clm_id]
    FROM @YourTable
    WHERE
    CHARINDEX(@SearchYear,clm_id,0)>0
    ORDER BY id

结果:

id  clm_id
1   2012
2   2012
3   2012