2012-10-29 82 views
3

我在MYSQL数据库中有一个查询。我有一个表order_det,该表的列remarks_desc包含的条目如下:在上面选择包含一个或多个单词的记录

表结构:在order_det表

Table: order_det 

Columns: rec_id, remarks_desc 

记录样本

rec_id  remarks_desc 
_________________________________________________________ 

1   a specific PROGRAMMING problem 
2   A software Algorithm 
3   software tools commonly USED by programmers 
4   Practical, answerable problems that are unique to the programming profession 
5   then you’re in the right place to ask your question 
6   to see if your QUESTION has been asked BEFORE 

我的要求,我想只有选择记录包含以全部大写字母存储的更多单词。从以上6条,我想只有跌破1,3,6记录选择:

rec_id  remarks_desc 
__________________________________________________ 
1   a specific PROGRAMMING problem (it contains one all uppercase word PROGRAMMING) 
3   software tools commonly USED by programmers (it contains one all uppercase word USED) 
6   to see if your QUESTION has been asked BEFORE (it contains two all uppercase words QUESTION and BEFORE) 

我试图存档该使用LIKE,REGEXP但得到不正确的结果。 请帮我拿到正确的结果。

回答

0

尝试:

SELECT rec_id, remarks_desc FROM order_det WHERE remarks_desc REGEXP '(^|[[:blank:]])[[:upper:]][[:upper:]]+([[:blank:]]|$)' 

我假设你要排除单字母大写单词。如果你想在字符串开始时排除大写字母,你需要调整正则表达式。

确保您的表排序规则是大小写敏感的(_cs不_CI)

我使用的信息从http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

但是,如果你有使用正则表达式从数据库中提取数据,这是值得考虑你的数据库设计是否可以改进。 如果您需要数据库的良好性能,这一点尤其重要。

+0

Tim,是表格整理是区分大小写的。但它并不完全返回输出,包括入口没有完全盖住单词的初始文字。 – Manim

+0

对不起,我不太了解你的评论。你能给我一个我的查询匹配的东西,你不想匹配的例子吗? –

0

这是一个非常简单的存储函数,它返回大写字的单词量。

缺点:

  • 它的存储功能并不是纯粹的SQL;
  • 它使用collate
  • 它使用正则表达式,但您可以使用另一个内部循环为它摆脱它;
  • 它计算所有的话,但你可以添加休息,如果你达到2

请找到该函数的following link(gist.github.com)。它在这里显示不正确。

+0

Ravnur,我没有使用这个,因为我需要创建函数,但我会尝试这个。 – Manim

+0

我不确定你可以使用纯SQL来做你想做的事情 – ravnur

相关问题