如何将表中列的逗号分隔值放入SQL in运算符中?
我有一个表,它有一个列,我在其中存储一个逗号分隔的文本,每个逗号分隔的值都有一个单引号。这些值是员工ID。这就是它的样子 现在,我有一个SQL查询,需要将此列中的值放入SQLIN运算符中。大概是这样的:如何将表中列的逗号分隔值放入SQL in运算符中?,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有一个表,它有一个列,我在其中存储一个逗号分隔的文本,每个逗号分隔的值都有一个单引号。这些值是员工ID。这就是它的样子 现在,我有一个SQL查询,需要将此列中的值放入SQLIN运算符中。大概是这样的: select * from EMPLOYEE_MASTER where EMPLOYEEID IN (select CM_CONFIG_VALUE from ADL_CONFIG_MAST_T where
select *
from EMPLOYEE_MASTER
where EMPLOYEEID IN (select CM_CONFIG_VALUE
from ADL_CONFIG_MAST_T
where CM_CONFIG_KEY like 'ATT_BIOMETRIC_OU_ID'
)
但这不起作用,执行查询时返回0行,而如果我像下面那样正常执行查询,它就起作用了
select *
from EMPLOYEE_MASTER
where EMPLOYEEID IN('9F3DD4B791554DDE','C9B90D62851D43AB','828CB9E6204B4DDC')
请建议我在这里应该做什么。我曾尝试使用子字符串删除第一个和最后一个字符,并假设单引号可能是问题所在,但这也不起作用
select * from EMPLOYEE_MASTER where EMPLOYEEID IN(select EMPLOYEEID from ADL_CONFIG_MAST_T where CM_CONFIG_KEY like 'ATT_BIOMETRIC_OU_ID')
列应与从tablename选择COLUMNNAME中的where COLUMNNAME相同。您可以创建一个临时变量,然后使用exec命令获得所需的结果 声明@temp varchar200 选择@temp=CM\u配置值 从ADL\u配置\u桅杆\T 其中CM_配置_键,如“ATT_生物识别_OU_ID” 执行官选择* 来自员工和主管 在“+@temp+ 试试这个:
DECLARE @ID VARCHAR(500);
DECLARE @Number VARCHAR(500);
DECLARE @comma CHAR;
SET @comma = ','
SET @ID = (select CM_CONFIG_VALUE
from ADL_CONFIG_MAST_T
where CM_CONFIG_KEY like %ATT_BIOMETRIC_OU_ID% + @comma);
Create table #temp (EMPLOYEEID varchar(500))
WHILE CHARINDEX(@comma, @ID) > 0
BEGIN
SET @Number = SUBSTRING(@ID, 0, CHARINDEX(@comma, @ID))
SET @ID = SUBSTRING(@ID, CHARINDEX(@comma, @ID) + 1, LEN(@ID))
Insert into #temp
select @Number
END
select *
from EMPLOYEE_MASTER
where EMPLOYEEID IN(select EMPLOYEEID from #temp)
在查询中没有得到它的原因是因为内部查询只返回一行。因此,您的查询将“9F3DD4B791554DDE”、“C9B90D62851D43AB”、“828CB9E6204B4DDC”作为单个记录进行搜索 如果您的兼容性级别大于或等于130,则可以使用STRING_SPLIT函数。那么你的问题就是
SELECT *
FROM EMPLOYEE_MASTER
WHERE EMPLOYEEID IN
(SELECT value AS empid
FROM ADL_CONFIG_MAST_T CROSS APPLY string_split(CM_CONFIG_VALUE, ',' )
WHERE CM_CONFIG_KEY LIKE 'ATT_BIOMETRIC_OU_ID' )
实际上,它将CM_CONFIG_值与“,”分开,并将它们作为行返回。这是我提到的值列。然后将它们与IN子句一起使用
希望这有帮助 直接输入条件在此处不起作用。搜索前已拆分字符串。您可以使用SQL SERVER 2014中的XML选项来实现这一点
对于2016版及以上版本,您可以与兼容级别130一起使用您使用的SQL Server版本是什么?@Yogesharma SQL Server 2014您可以使用字符串分割功能。但我认为它是在SQL Server 2015中引入的。在SQL Server 2015中,我存储了一个逗号分隔的文本,每个逗号分隔的值都带有单引号。不。每行存储一项。我在where子句中使用列名CM_CONFIG_VALUE的原因是,CM_CONFIG_VALUE应该存储以逗号分隔的员工ID列表,我的要求是我需要根据该列中的员工ID查找数据。表ADL\U CONFIG\U MAST\U T.ok中不存在EMPLOYEEID列。在这种情况下,使用join.in查询在此场景中不起作用。我已在临时表上对其进行了测试,效果良好。使用这种方法,最后创建的查询是select*from EMPLOYEE_MASTER where EMPLOYEE_ID INselect CM_CONFIG_VALUE wfrom ADL_CONFIG_MAST where CM_CONFIG_KEY like'ATT_BIOMETRIC_OU_ID%'并再次返回0行。您面临什么问题?
SELECT *
FROM EMP
WHERE EMPID IN (
SELECT a.c.value('.', 'VARCHAR(1000)')
FROM (
SELECT x = CAST('<a>' +
REPLACE(REPLACE(CM_CONFIG_VALUE , ',', '</a><a>'),'''','') + '</a>' AS XML )
FROM ADL_CONFIG_MAST_T
-- WHERE <your_condition>
) m
CROSS APPLY x.nodes('/a') a(c))