2017-02-23 160 views
2

我有一个数组:SQL SELECT WHERE NOT LIKE

$codes = array (97121, 97122, 97123, 97180); 

真正的数组更长的时间,它包含了近130码,所以我认为它并没有成为一个循环。

而且我有了一列VilleAnn(城市,邮政编码)的前一个MySQL表:

  • 圣安妮97180
  • 滨海萨纳里83110

使用mysqli我必须选择VilleAnn不包含任何来自阵列的邮政编码$codes

如果VilleAnn是一个简单的邮政编码,我会说:

SELECT * FROM table WHERE VilleAnn NOT IN(97121, 97122, 97123, 97180) 

但在使用NOT LIKE "%..."

任何建议,这种情况下它必须是什么?

+1

你不能使用一个内部查询获取,而不是让他们为数字在'NOT IN'条款一长串的邮政编码? –

+1

查看https://stackoverflow.com/questions/9416062/sql-like-inside-array – SolarBear

回答

2

在条件不与通配符工作。最好的办法是尝试从原始字段提取邮编,在本例中

SELECT * FROM table WHERE right(VilleAnn,5) NOT IN ('97121', '97122', '97123', '97180') 

我相信现实生活中是比较复杂的,所以这可能需要进行调整,以反映该领域的实际格式。

3

你可能在你REGEXP:

SELECT * FROM table WHERE VilleAnn NOT REGEXP '97121|97122|97123|97180|....' 
2

事情是这样的:

SELECT * 
FROM `table` 
WHERE (
    `VilleAnn` NOT LIKE '%97121%' AND 
    `VilleAnn` NOT LIKE '%97122%' AND 
    `VilleAnn` NOT LIKE '%97123%' AND 
    `VilleAnn` NOT LIKE '%97180%' 
) 
1
SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]'; 

这会帮助你。

对于检查四次出现,你可以使用:

SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]{4}';