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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择查询|选择不以数字开头的条目 - MySQL相关的知识,希望对你有一定的参考价值。

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

示例条目:

  • 6300狗巷
  • 凯蒂驾驶
  • 500 Bird Chrest
  • 800轮胎路
  • 约翰逊大道
  • 公园大道

所以如果我对上面的内容进行了查询,我会期望:

  • 凯蒂驾驶
  • 约翰逊大道
  • 公园大道

表称为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开始而不是相反的方式获取行。

以上是关于选择查询|选择不以数字开头的条目 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:按日期选择前 5 个和后 5 个条目,1 个查询,没有子查询

MYSQL:使用字母数字 ID 在特定值之后选择接下来的 100 行

在单个查询中选择两个特定的 mysql 表行

为啥数组的索引/列表不以 1 开头? [复制]

如何生成一个不以 0 开头且具有唯一数字的随机 4 位数字?

选择多个条目的组合