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