找不到INSTR的哪个部分

时间:2014-03-28 19:40:41

标签: sql

如何找到未找到INSTR的哪个部分?例如,我的查询在我的结​​果中返回70002和70001。我现在想做的是找到表中没有的部分。这是一个我无法克服的障碍。我不想在表中看到所有其他orderItem。

在我的场景中,我只想要70000返回。

基本上,我的字符串的哪一部分不在表格中。

感谢所有建议。

SELECT
    orderItems
FROM Orders
WHERE 
INSTR('70002-70001-70000',orderItems)!=0

3 个答案:

答案 0 :(得分:0)

SELECT orderItems
FROM Orders
WHERE orderItems IN ('7001','7002','7003')

SELECT orderItems
FROM Orders
WHERE orderItems NOT IN ('7001','7002','7003')

答案 1 :(得分:0)

我同意Metaphor的回答,IN声明很可能是更好的方式。但是,如果您想继续使用INSTR,则只返回缺失的值应该很简单。

如果通过检查INSTR的返回值是否不等于0来找到确实存在的条目,则缺少的条目是INSTR返回0的位置。

SELECT
    orderItems
FROM Orders
WHERE 
INSTR('70002-70001-70000',orderItems)=0

答案 2 :(得分:0)

最好将字符串解析为SecondTable并使用以下方法获得所需的结果:

select *
from SecondTable
where SecondTable.OrderItems not in(select OrderItems from Orders)

但是如果您需要从字符串中进行选择,请将其分配给变量并修改Orders表中每条记录的变量:

set @str = '70002-70001-70000';
select @str := replace(@str,OrderItems,'')
from Orders;
select replace(@str,'-','') STR;

http://www.sqlfiddle.com/#!2/f8d67fa/9