我需要一个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查询或其他查询的选项来使用它?
答案 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。正如菲利克斯所说,你需要规范你的表格以使其正常工作。