选择查询|选择不以数字开头的条目 - MySQL

时间:2015-03-09 07:30:39

标签: mysql sql select

我需要选择所有不以1-9之间的数字开头的条目。

示例条目

  • 6300 Dog Lane
  • Kitty Drive
  • 500 Bird Chrest
  • 800 Tire Road
  • Johnson Ave
  • Park Ave

因此,如果我对上述内容进行了查询,我希望

  • Kitty Drive
  • Johnson Ave
  • Park Ave

表名为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修改数据。

谢谢

5 个答案:

答案 0 :(得分:6)

试试这个:

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%'
          ...

答案 1 :(得分:4)

您可以使用以下语法:

SELECT column FROM TABLE where  column NOT REGEXP '^[0-9]+$' ;


SELECT DISTINCT name, location FROM object
                WHERE location NOT REGEXP '^[0-9]+$' ;

答案 2 :(得分:1)

试试这个,更简单: -

SELECT DISTINCT name, location FROM object WHERE location NOT LIKE '[0-9]%';

答案 3 :(得分:0)

你"尝试了什么"需要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开始而不是相反的方式获取行。

答案 4 :(得分:0)

ISNUMERIC应该可以工作。 (也将排除0)。

示例代码-

ISNUMERIC(SUBSTRING(location, 1, 1)) = 0