Select 查询 | Select 不以数字开头的整体 - MySQL
Select Query | Select Entires That Don't Start With A Number - MySQL
我需要 select 所有不以 1-9 之间的数字开头的条目。
示例条目:
- 6300 狗巷
- 小猫开车
- 500 鸟宝箱
- 800 轮胎路
- 约翰逊大街
- 公园大道
所以如果我 运行 上面的查询我会期望 :
- 小猫开车
- 约翰逊大街
- 公园大道
Table 称为 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 修改数据。
谢谢
您可以使用以下 stntax:
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 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 DISTINCT name, location FROM object WHERE location NOT LIKE '[0-9]%';
您 "tried" 需要 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 开头的行而不是相反的行。
ISNUMERIC
应该可以。 (也将排除 0)。
示例代码-
ISNUMERIC(SUBSTRING(location, 1, 1)) = 0
我需要 select 所有不以 1-9 之间的数字开头的条目。
示例条目:
- 6300 狗巷
- 小猫开车
- 500 鸟宝箱
- 800 轮胎路
- 约翰逊大街
- 公园大道
所以如果我 运行 上面的查询我会期望 :
- 小猫开车
- 约翰逊大街
- 公园大道
Table 称为 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 修改数据。
谢谢
您可以使用以下 stntax:
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 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 DISTINCT name, location FROM object WHERE location NOT LIKE '[0-9]%';
您 "tried" 需要 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 开头的行而不是相反的行。
ISNUMERIC
应该可以。 (也将排除 0)。
示例代码-
ISNUMERIC(SUBSTRING(location, 1, 1)) = 0