我需要搜索第二个和第三个字符为oo的名称。姓氏不是Tomeloos。
我想出了这个查询
SELECT * FROM student
WHERE INSTR(naam, 'o') = 2 AND INSTR(naam, 'o') = 3
AND naam NOT LIKE '%Tomeloos';
但是就像预期的那样,这不起作用,因为这部分将永远不会返回true:
AND INSTR(naam, 'o') = 3
因为它会在第二个位置看到o。
有谁知道如何使用INSTR
功能实现这一目标?
感谢
答案 0 :(得分:1)
您必须使用substr
试试这个
SELECT * FROM student
WHERE INSTR(naam, 'o') = 2 AND instr(substr(naam,instr(naam,'o')+1),'o')+instr(naam,'o') = 3
AND naam NOT LIKE '%Tomeloos';
答案 1 :(得分:1)
虽然在某些版本的SQL INSTR
允许指定起始位置,但MySQL的情况并非如此。因此,INSTR
无法在不首先获得不包含“' o”的子字符串的情况下进行此操作。在第2位。
尽管如此,LIKE
似乎更适合您尝试实现的目标:
WHERE naam LIKE '_oo%'
答案 2 :(得分:1)
你可以尝试
SELECT * FROM student
WHERE SUBSTR(naam, 2, 2) = 'oo'
AND naam NOT LIKE '%Tomeloos';