【问题标题】:sqlite query greater than or equal to with wildcardssqlite查询大于或等于通配符
【发布时间】:2017-06-21 16:18:00
【问题描述】:

我正在使用此代码:

SELECT *
FROM TableName
WHERE (ColumnName >= '' AND ColumnName < '豈')
   OR (ColumnName >= '????' AND ColumnName < '????')
   OR (ColumnName >= '????' AND ColumnName < '????');

来自this answer - 但它只返回以这些范围内的任何内容开头的条目。

我需要能够找到不以这些范围内的字符包含上述范围内的字符的条目。

我尝试过改变

'' AND ColumnName < '豈'

'%""%' AND CHS < '%"豈"%'

希望这会奏效 - 但它显然不是那样的。

我怎样才能让它工作?

【问题讨论】:

    标签: sqlite search wildcard


    【解决方案1】:

    对于单个字符,您可以使用 LIKE,但字符范围需要 GLOB

    SELECT ...
    FROM MyTable
    WHERE ColumnName GLOB '*[-豈]*'
       OR ColumnName GLOB '*[?-?]*'
       OR ColumnName GLOB '*[?-?]*';
    

    【讨论】:

      【解决方案2】:

      使用标准 SQL 执行此操作的唯一方法是为范围内的每个字符都包含一个 OR 子句:

      SELECT * FROM Table WHERE
         ColName LIKE '%X%' OR
         ColName LIKE '%Y%' OR 
         ColName LIKE '%Z%' . . .
      

      这很乏味并且可能不实用,具体取决于您的范围内有多少个字符。

      您可以查看的另外两个选项是正则表达式,在 SQLite 中使用 REGEXP 运算符表示:

      SELECT * FROM Table WHERE ColName REGEXP 'regular_expression'
      

      或者全文搜索,记录在这里:http://www.sqlite.org/fts3.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        相关资源
        最近更新 更多