选择数据库中的奇数语法

时间:2018-03-07 13:19:33

标签: mysql sql

基本上我有一个包含大量城市名称的大型MySQL数据库表,其中90%是有效的条目,但其中一些是以...无效的方式编写的。
例如,有效的方式是juste" CITYNAME"但有些人喜欢"(城市名)(国家)"或只是"(城市名称)"所以我只想SELECT所有未写入有效方式的条目。 我不知道这个具体的内容是否会毫不犹豫地向我询问一些确切的元素。 请帮助我不知道如何构建我的SQL查询。

CREATE TABLE cities(
   name    VARCHAR(50) NOT NULL PRIMARY KEY
);
INSERT INTO cities(name) VALUES ('ORLANDO');
INSERT INTO cities(name) VALUES ('(CHARLOTTE)');
INSERT INTO cities(name) VALUES ('(PHOENIX)(USA)');
INSERT INTO cities(name) VALUES ('AUSTIN(USA)');
INSERT INTO cities(name) VALUES ('TENNESSEE NASHVILLE');

以下是我必须处理的各种条目的一些例子 我不知道如何描述所需的输出,它只是一个奇怪的语法列表,有或没有括号。
重点是删除那些奇怪的条目,但在这之前我必须SELECT。我也不会删除它们,只需要SELECT

3 个答案:

答案 0 :(得分:0)

为什么不尝试像

这样的东西
Select * from cities where name like '(%';

如果问题是括号..那么将选择以括号开头的所有内容

编辑:

Select * from cities where name like '%(%' or name like '%)%';

它给出包含(OR a)

的每一行

EDIT2:一些解释

字符'%'替换任何字符串。因此,如果你像'% randomthing %'那样,它会查找看起来像anystring_randomthing_anystring的所有东西。我希望我明白这一点

答案 1 :(得分:0)

输出的可能解决方案:

select * from cities where instr(name,')') or instr(name,'(');
(CHARLOTTE)
(PHOENIX)(USA)

这会查找包含"("或")"任何地方。

答案 2 :(得分:0)

您正在使用MySql,因此您可以:

select *
from cities
where name not regexp '^[A-Z-]+$';

not regexp '^[A-Z-]+$'表示所有不尊重格式"AAAA""AAAA-AAAAA"(其中A代表大写字母)的城市名称被视为无效