2014-01-21 14 views
1

我有简单的SQL查询:“%”,这不会有字母“A”的“u”,“O”,它

SELECT * FROM keys WHERE key LIKE ‘a%o%u’ 

但我想仅此列,其中key有第一个字母“a”,居中“o”,最后一个字母“u”,并且他们之间没有字母a,o和u。

+1

测试当你看到O需求是在中心,你的意思是中心,或随便找个地方之间(无论哪种方式,我猜你需要一个正则表达式)? –

+0

使用正则表达式。 REGEX大师将能够告诉你哪一个。 – Strawberry

+0

http://stackoverflow.com/questions/2821419/regular-expression-starting-and-ending-with-a-letter-accepting-only-letters – Hituptony

回答

1

使用RLIKE。我目前正在使用手机,因此无法发布完整答案。你可以查阅mysql手册来获取RLIKE/REGEXP。

0

尝试......

SELECT * FROM WHERE键(按键LIKE '百分比' 或关键LIKE '%0%' 或关键LIKE '%U')和(关键NOT LIKE“%A% 'AND key not like'%o%'and key not LIKE'%u%');

该声明对我来说没有多大意义,特别是字母'o'的条件。第一种情况表示'o'应该在中心,然后第二种情况表示在两者之间没有'o'。但我想你想要的应该转化为此。 :)

1

你真正在这里寻找的是一个正则表达式。谢天谢地,这可以做到。请看下面的表达式为您的需求:

a([^aou]*[o]{1}[^aou]*)?u 

这只是需要被添加到WHERE条款:

SELECT * FROM keys WHERE `key` REGEXP 'a([^au]*[o]{1})*u' 

并帮助理解正则表达式,这里的说明和演示:

Regular expression visualization

Debuggex Demo

+0

有了这个“au”就可以了。在o和u之间不可能有字符。 – fancyPants

+0

@fancyPants,更具体请给我一个例子,打破它,我会得到它的修改。 –

+0

就像我说的,“au”打破了它,因为那里必须有一个“o”。最小的字符串是“aou”。另一个例子,“哎哟”是不可能的。 – fancyPants

1

我没有测试更多,但是你可以很容易与您的数据

like 'a[^aou]%o%[^aou]%u' 
+0

我认为应该有“%”之后,“[^ aou]” – Piotrek

+0

谁上传呢? LIKE不支持除%和_之外的任何通配符。 – fancyPants

2
SELECT * FROM keys WHERE `key` REGEXP 'a[^aou]*o[^aou]*u' 

Regular expression visualization

+0

真棒图片,我从来没有见过它。 (我刚刚在debuggex上注册) – Melon

+0

我在PHPMyAdmin启动它时得到这个“#1139 - 从正则表达式” – Piotrek

+0

@ Ludwik11得到错误'重复运算符操作数无效'更正了它,请重试。 – fancyPants

相关问题