【问题标题】:How do I select by a range of starting characters?如何按一系列起始字符进行选择?
【发布时间】:2011-10-06 05:12:06
【问题描述】:

这是我的 mySQL 查询:

SELECT *
FROM `eodList` 
WHERE datechanged>='$curdate' 
GROUP BY symbolName 
ORDER BY dateChanged DESC

如何获取symbolName 以字母A-F 开头的所有行(例如)?


更新:

我需要无需大量代码更改即可轻松更改为另一个范围的东西。

【问题讨论】:

    标签: mysql database select range startswith


    【解决方案1】:

    试试Regex

    WHERE symbolName REGEXP '^[A-F]'
    

    【讨论】:

      【解决方案2】:
      SELECT *
      FROM `eodList` 
      WHERE datechanged>='$curdate' AND
      
      
      ((SUBSTRING(symbolName, 1, 1) >= "A" AND SUBSTRING(symbolName, 1, 1) <="F"))
      GROUP BY symbolName 
      ORDER BY dateChanged DESC
      

      【讨论】:

      • @sll 是什么意思?
      • 你不能用(SUBSTRING(symbolName, 1, 1) &gt;= "A" AND SUBSTRING(symbolName, 1, 1) &lt;="F")替换这些条件吗?
      • @genesis:我想知道您提出的方法是否比使用内置 REGEX 的方法更快/更慢
      • 啊哈。我不确定,我可能会尝试一下
      【解决方案3】:

      Regular expressionsSUBSTRING() 函数调用更快。这将使用symbolName 的索引:

      WHERE symbolName >= 'A' 
        AND symbolName < 'G'
      

      不过,区分大小写存在问题。您是否也想要以a..f 开头的名称?

      如果您只想要以大写开头的名称并且表格具有utf8 字符集,请使用:

      WHERE symbolName >= 'A' COLLATE utf8_bin
        AND symbolName < 'G' COLLATE utf8_bin
      

      对于其他字符集,使用对应的_bin 排序规则。

      【讨论】:

      • 我知道这篇文章已经有几年的历史了,但是有没有办法运行它并包含第二个字符。我尝试使用
      • @Helto “第二个字符”是什么意思?
      • 是的,我一开始没有得到它,但现在我知道我可以使用
      • 如果你想包含以G开头的单词,为什么不使用&lt; 'H'呢? (或其他答案中的一些建议)
      • 它必须是动态的,我不想使用字母数组来选择下一个字母,它不适用于“Z”。感谢您的回复,我得到了它的工作:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多