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

tuwxkamq  于 2022-10-31  发布在  Mysql
关注(0)|答案(6)|浏览(195)

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

示例条目

  • 狗巷6300号
  • 基蒂大道
  • 500只小鸟
  • 轮胎路800号
  • Json大街
  • 公园大道
    因此,如果我对上面的内容进行查询,我会期望
  • 基蒂大道
  • Json大街
  • 公园大道

表名为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。
谢谢您

cs7cruho

cs7cruho1#

试试看:

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

7y4bm7vi2#

您可以使用下列stntax:

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

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

tvz2xvvm3#

试试这个,它更简单:

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

e5nszbig4#

您“尝试”的内容需要使用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开头的行,而不是相反的行。

ax6ht2ek

ax6ht2ek5#

对于sql server,请尝试以下操作:

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

fdbelqdn6#

ISNUMERIC应该可以工作。(也将排除0)。
示例代码-

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

相关问题