【问题标题】:Difference between _%_% and __% in sql serversql server 中 _%_% 和 __% 的区别
【发布时间】:2018-05-10 09:15:33
【问题描述】:

我正在通过W3School 学习SQL 基础知识,在了解wildcards 基础知识的过程中,我经历了以下查询:

--Finds any values that start with "a" and are at least 3 characters in length
WHERE CustomerName LIKE 'a_%_%'

根据以下示例,查询将搜索 CustomerName 列以“a”开头且长度至少为 3 个字符的表。

但是,我也尝试以下查询:

WHERE CustomerName LIKE 'a__%'

上面的查询也给了我完全相同的结果。 我想知道这两个查询是否有任何区别?第二个查询是否在某些特定场景中产生不同的输出?如果是,那将是什么情况?

【问题讨论】:

  • 我觉得两者都一样
  • @YogeshSharma 但我们已将 % 放在最后,这意味着它会在最后打印任何字符。我也执行了两个查询,都显示相同的输出。
  • 其实看起来是个错误。
  • 代码的作者可能觉得双下划线很容易被误读为单下划线。第一个模式以一种奇怪的方式绝对清楚地表明存在两个下划线。这些模式在功能上是等效的。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

两者都以A 开头,以% 结尾。在中间部分,第一个说“一个字符,然后在零和多个字符之间,然后一个字符”,而第二个说“一个字符,然后一个字符 ”。

考虑到它们之后的部分(最后部分)是%,意思是“在零和许多字符之间”,我只能看到两者子句相同,因为它们本质上都只想要一个以 A 开头的字符串,然后至少有两个后续字符。也许如果_ 允许的字符至少有一些限制,那么它们可能会有所不同。

如果我必须选择,我会选择第二个,因为它更直观。毕竟,许多其他掩码(例如a%%%%%%_%%_%%%%%)会产生相同的效果,但为什么会出现奇怪的复杂性?

【讨论】:

  • 同意你的看法。
【解决方案2】:

对于 Like 运算符,单个下划线“_”表示任何单个字符,所以如果你放一个下划线 like

ColumnName LIKE 'a_%'

你基本上是说你需要一个字符串,其中第一个字母是'a',然后是另一个单个字符,然后是任何东西或什么都没有。

ColumnName LIKE 'a__%'ColumnName LIKE 'a_%_%'

这两个表达式的意思是第一个字母“a”,然后是两个字符,然后是任何东西或什么都没有。或者用简单的英语,任何以a开头的3个或更多字符的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2010-11-11
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多