我需要选择所有不以1-9之间的数字开头的条目。
示例条目:
所以如果我对上面的内容进行了查询,我会期望:
表称为objects
,该列称为location
。
我试过的东西:
SELECT DISTINCT name, location FROM object WHERE location NOT LIKE '1%' OR '2%' OR '3%' OR '4%' OR '5%' OR '6%' OR '7%' OR '8%' OR '9%';
不幸的是,这是不成功的。如果无法做到这一点请告诉我,我将使用Perl修改数据。
谢谢
试试这个:
SELECT DISTINCT name, location FROM object
WHERE substring(location, 1, 1)
NOT IN ('1','2','3','4','5','6','7','8','9');
或者你必须在每个数字之前添加NOT LIKE
:
SELECT DISTINCT name, location FROM object
WHERE location NOT LIKE '1%'
OR location NOT LIKE '2%'
...
您可以使用以下语法:
SELECT column FROM TABLE where column NOT REGEXP '^[0-9]+$' ;
SELECT DISTINCT name, location FROM object
WHERE location NOT REGEXP '^[0-9]+$' ;
试试这个,它更简单: -
SELECT DISTINCT name, location FROM object WHERE location NOT LIKE '[0-9]%';
你“尝试”需要有AND
而不是OR
。此外,DISTINCT
是不必要的。
如果你有
INDEX(location)
这可能会比任何其他答案更快:
( SELECT name, location FROM object
WHERE location < '1'
) UNION ALL
( SELECT name, location FROM object
WHERE location >= CHAR(ORD('9' + 1)) )
此技术仅适用于连续的首字母范围,例如1..9
。
一个有点相关的问题:Should I perform regex filtering in MySQL or PHP? - 它询问从1..9开始而不是相反的方式获取行。