我需要sql IN查询单列中的多个值?

时间:2016-01-27 05:19:27

标签: sql sql-server

我需要一个SQL IN查询,如下表所示

ID    NAME      VALUES
1    Germany   0004;0009;0014;0045;0064
2    Italy     0007;0014;0020;0041;0064
3    France    0014;0020;0015;0038;0074;0064;0066

我有一个像(0014,0020,0064)这样的输入参数,目前我正在使用,如下所示

select * 
from table_name 
where VALUES like '%0014%' 
   or VALUES like '%0020%' 
   or VALUES like '%0064%'

如果我有3个或4个输入参数,我可以,但输入参数将超过50,在这种情况下,我需要避免像查询。是否有使用IN查询或其他查询的选项来使用它?

3 个答案:

答案 0 :(得分:0)

尝试编写stored procedure,其中将select IN子句值作为参数并迭代整个列值并返回out个参数。

答案 1 :(得分:0)

您可以使用字符串拆分器。这是一个使用XML:

<body>
<script type="text/javascript">
window.onload=function(){

var elem = document.createElement("li");
elem.setAttribute("id", "123");

var elem = document.createElement("img");
elem.setAttribute("src", "https://upload.wikimedia.org/wikipedia/commons/5/53/Loading_bar.gif");
elem.setAttribute("height", "");
elem.setAttribute("width", "");
elem.setAttribute("alt", "Flower");
document.getElementById("placehere").appendChild(elem);
}
</script>
<ul id="placehere">
</ul>
</body>

现在这是您的最终查询:

CREATE FUNCTION dbo.Split
(
   @List       NVARCHAR(MAX),
   @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
   RETURN 
   (  
      SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
      FROM 
      ( 
        SELECT x = CONVERT(XML, '<i>' 
          + REPLACE(@List, @Delimiter, '</i><i>') 
          + '</i>').query('.')
      ) AS a CROSS APPLY x.nodes('i') AS y(i)
   );

答案 2 :(得分:-1)

您的查询可以重写为:

select * from table_name where VALUES IN ('0014', '0020', '0064')

请注意,您不能同时使用LIKE和IN。正如菲利克斯所说,你需要规范你的表格以使其正常工作。