【问题标题】:Various ways to query strings?查询字符串的各种方法?
【发布时间】:2011-03-20 20:57:04
【问题描述】:

我正在开发一个包含大量精心设计的字符串的应用。我正在设计字符串格式,为此我需要知道在查询相同数据时什么是可能的,什么是不可能的。

哪些是 MySQL 可能的? .. 我该如何完成它们?

  1. 包含此确切字符串的结果 -- 不区分大小写

  2. 包含此确切字符串的结果 -- 区分大小写

  3. 包含相似字符串的结果——不区分大小写

  4. 包含相似字符串的结果——但单个字符的大小写必须相同

【问题讨论】:

  • “相似”是什么意思?
  • 我的意思是按相似度排序的结果。所以搜索“GB”会返回“GB”、“GC”、“AB”、“DB”、“GAB”、“GABO”等结果。
  • 这让我觉得这是一个非常雄心勃勃的过滤算法。我还注意到,除了过滤之外,您还引入了排序。

标签: sql mysql string


【解决方案1】:

1. 包含该字符串的结果——不区分大小写

2. 包含该字符串的结果——区分大小写

这些都可以实现。请参阅 MySQL 中记录 string functions 的页面,尤其是 INSTR

区分大小写由列的排序规则决定。如果您希望以区分大小写的方式比较列中的值,则为它提供区分大小写的排序规则,如下例所示:

ALTER TABLE MyTable ADD MyColumn VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_cs NOT NULL

相反,如果您希望以不区分大小写的方式比较列中的值,则为其指定不区分大小写的排序规则。

如果您可能希望以任何一种方式比较列中的值,那么也有一些方法可以做到这一点,尽管它稍微复杂一些。

3. 包含相似字符串的结果——不区分大小写

4. 包含相似字符串的结果 -- 但单个字符必须大小写相同

取决于“相似”的确切含义,但对于“相似”的某些值,是的,这是可用的。您可能会发现查阅我上面链接的页面很有用。

【讨论】:

  • +1 用于讨论排序规则,它们将成为用户寻求区分大小写的决定因素。
  • 我邀请您尝试一下我的其他类似 MySQL 问题 .. 如果您能回答我所有的问题,它的价值 +500 代表:stackoverflow.com/questions/3338889/…
【解决方案2】:
  1. SELECT this FROM that WHERE LOWER(string) = LOWER("blablabla");
  2. SELECT this FROM that WHERE string = "blablabla";
  3. SELECT this FROM that WHERE LOWER(string) LIKE LOWER("blablabla");
  4. SELECT this FROM that WHERE string LIKE "blablabla";

希望是对的。

【讨论】:

  • (4) 不区分大小写的排序规则可能出错,(3) 和 (4) 缺少一些 %'s ,(1) 将具有更高的性能与当前答案(4),使用不区分大小写的排序规则。
  • 我邀请您尝试一下我的其他类似 MySQL 问题 .. 如果您能回答我所有的问题,它的价值 +500 代表:stackoverflow.com/questions/3338889/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多