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

14

我需要选择所有不以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修改数据。

6个回答

29

试一下这个:

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

尝试第二种方法。我只需要它能够工作,不需要看起来漂亮。 - Kirs Kringle
我非常感激这个答案。我不知道你可以提取字符串位置。这完全令人惊叹,对许多事情都很有用。谢谢! - Kirs Kringle

11
你可以使用以下语法:

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


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

现在它可以工作了,但它仍然轮询所有带数字的内容。 - Kirs Kringle
@kirskringle 不是的。它是标准分发版的一部分。你使用的是哪个版本? - Strawberry
它能工作,但数字仍然显示下面的答案解决了问题。 - Kirs Kringle
1
@Avidan,你付出了很大的努力,而且你还得到了赞成票!你的答案非常优雅,展示了一个非常重要的事情。现在我可以在查询中使用正则表达式来处理我的生活了! - Kirs Kringle
1
@Avidan 知识就是力量!如果你弄清楚了,请告诉我! - Kirs Kringle

5
试试这个。它更简单:
SELECT DISTINCT name, location FROM object WHERE location NOT LIKE '[0-9]%';

3
我现在无法访问MS SQL数据库,我正在使用Oracle SQL服务器。这在Oracle SQL中不起作用,为了使其在那里工作,您必须使用regexp_like函数。 - Soham Banerjee

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

一个稍微相关的问题:在MySQL还是PHP中进行正则表达式过滤处理? -- 它询问的是如何获取以1..9开头的行,而不是相反的情况。


0

针对 SQL Server,请尝试以下方法:

select column_name
from table
where substring(column_name,1,1) not in (1,2,3,4,5,6,7,8,9)

-1

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

示例代码 -

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

2
ISNUMERIC不是MySql内置的函数。 - e-Dough

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接