首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL选择姓氏以特定字母开头的名称

问MySQL选择姓氏以特定字母开头的名称
EN

Stack Overflow用户
提问于 2010-03-11 13:39:43
回答 4查看 5.2K关注 0票数 1

我有一个MySQL数据库,其中有一个包含全名的字段名称。要选择姓氏以特定字母开头的所有人员,本例假设为A,我使用以下查询:SELECT * FROM db WHERE Name LIKE '% A%'。但是,这也会选择中间名以A开头的用户。是否要更改此查询,以便只选择以A开头的姓氏?

EN

回答 4

Stack Overflow用户

发布于 2010-03-11 13:46:20

代码语言:javascript
复制
SELECT * FROM db WHERE Name REGEX ' A[-[:alnum:]'']*$'
票数 4
EN

Stack Overflow用户

发布于 2010-03-11 13:49:23

Ignacio的Regex工作起来更灵活--如果Regex完全把你搞糊涂了,你也可以用这样的东西:

SELECT * FROM db WHERE LEFT(SUBSTRING_INDEX(Name, ' ', -1), 1) = 'A'

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

票数 2
EN

Stack Overflow用户

发布于 2013-03-07 04:20:21

我最近也遇到了同样的情况。最好的解决方案是不将姓名作为全名存储在数据库中,然而,有时我们无法控制数据,需要一个解决方案。我最终使用了以下内容:

代码语言:javascript
复制
SELECT * FROM db WHERE Name REGEXP " +[[:<:]]j[-'a-z]{3,}$| +[[:<:]]j[-'a-z]{3,} jr.$| +[[:<:]]j[-'a-z]{3,} sr.$";

这将搜索以“J”开头的姓氏。我发现J和S是最难的,因为数据库中的一些名字包括Jr。或者是Sr.在最后,抛出查询。

我必须指出,这是一个非常粗糙的解决方案,我可以想到许多实例,当它不能工作。它可能很快就会变得很长。它考虑了用连字符连接的名称或带有撇号的名称,但没有可靠的方法来匹配名称。

对正在发生的事情进行简要说明:

  • 第一个空格确保我们永远不会与名字匹配。
  • [:<:]是单词边界的开始([:>:]将匹配单词的结尾)。因此,[:<:]j匹配以J开头的单词。记住,mysql在匹配字符串时不区分大小写。
  • $确保它是字符串的末尾,因为我们正在查找姓氏。这给Jr或Jr带来了一个问题。和Sr或sr。因此{3,}确保其长度大于2个字母,并且-'a-z不允许句点。我意识到这将跳过有效的2个字母的姓氏,例如Xu,但我在数据库中有比Xus更多的Jr。另一种解决方案是将{3,}替换为*。然后将返回两个字母名称,但如果Jr缺少句点,则也将返回。
  • 最后,使用另外两个大小写‘jr.$’和‘sr.$’运行此表达式,以便Jr。当姓氏与要搜索的字母匹配时,将返回结果。

还可以添加其他情况,如II或III。

您还可以使用MySQL REGEXP文档作为参考。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2422807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档