在UPPERCASE中完全选择包含一个或多个单词的记录

时间:2012-10-29 10:37:42

标签: mysql sql regex uppercase

我在MYSql数据库中有一个查询。我有一个表order_det,表的列remarks_desc包含以下条目:

表格结构:

Table: order_det

Columns: rec_id, remarks_desc

order_det表中的示例记录

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将其归档,但结果不正确。 请帮助我得到正确的结果。

2 个答案:

答案 0 :(得分:0)

尝试:

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

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

确保您的表格排序区分大小写(_cs not _ci)

我使用了来自http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

的信息

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

答案 1 :(得分:0)

这是非常直接的存储函数,它返回行中大写的单词数量。

缺点:

  • 它的存储函数不是纯SQL;
  • 它使用collate
  • 它使用regexp,但你可以使用另一个内部循环来自由填充它;
  • 它会计算所有单词,但如果达到2,则可以添加中断。

请在following link(gist.github.com)上找到该功能。它在这里无法正确显示。