【问题标题】:SQL BETWEEN missing dataSQL BETWEEN 缺失数据
【发布时间】:2014-11-05 11:27:08
【问题描述】:
 SELECT Field1
 FROM Table
 WHERE Field1 BETWEEN "A%" AND  "D%"

示例数据:

A432434324324
B435435435
C5654664546
D5465465546546
A768677687
B8768678768
A65446456546
B876867877868

查询结果不包含“D”行,有什么想法可以处理吗? (我需要对文本进行操作,而不是数字)。

【问题讨论】:

  • @Harry:你读过问题并错过了代码吗?
  • @Harry:因为 MySQL 也是 SQL,所以标记了两者。
  • 我确实看过,简单的复制粘贴错误@juergend
  • BETWEEN 是否对这些字符串运行 LIKE 运算符?我想知道这些百分比符号是否是文字?如果是这种情况,这里可能有一个正则表达式子句。
  • 您不会在 c# 代码上标记 vb 吗? @juergend

标签: mysql sql csv


【解决方案1】:

省略通配符并尝试:

WHERE Field1 >= 'A' AND Field1 < 'E'

或者:

WHERE LEFT(Field1, 1) BETWEEN 'A' and 'D'

'%' 通配符用于LIKE,而不用于其他字符串比较。

两个音符:

  • 第一个版本更好,因为它允许 MySQL 使用Field1 上的索引。
  • 对字符串和日期常量使用单引号;这是所有数据库的通用语法。

【讨论】:

    【解决方案2】:

    您不能在“between”函数中使用通配符。通过查询,您将获得 A 和 % 符号以及 D 和 % 符号之间的所有值。 % 符号在数字之前的位置。

    【讨论】:

      【解决方案3】:

      通配符用于搜索。在这里,RDBMS 会将它们作为文字。 所以,你得到所有的行,以 a 开头,第二个字符的值高于 '%' 的值,并得到所有行到 'D' ,第二个字符的值低于 '%' '。

      试试 在“A”和“DZZZ”之间 或类似的东西。

      【讨论】:

        猜你喜欢
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        相关资源
        最近更新 更多