【问题标题】:Does SQLite support character range with [ ]?SQLite 是否支持带有 [ ] 的字符范围?
【发布时间】:2020-10-21 19:00:52
【问题描述】:

我正在尝试在 SQLite 中使用 Northwind 版本(有人在 Github 上发布了它,它非常方便),但是我使用 @987654321 选择姓氏以 B、C、D、...、L 开头的员工的查询@ 返回空表:

SELECT Title
FROM Employees
WHERE LastName LIKE '[B-L]%'

该表包含这样的名称(实际上是大多数名称)。 SQLite 不支持LIKE[] 中的字符范围吗?

【问题讨论】:

  • SQL 标准不对正则表达式使用 LIKE。 LIKE 的唯一通配符是 _%

标签: sql database sqlite


【解决方案1】:

SQLite 不支持您想要的这种 SQL Server 功能。
您可以使用SUBSTR()

WHERE SUBSTR(LastName, 1, 1) BETWEEN 'B' AND 'L'

或:

WHERE LastName >= 'B' AND LastName < 'M'

【讨论】:

  • 赞成,我是一个公平的玩家,这是一个很好的解决方案;)在大型数据集上测试 REGEXP 和 this 之间的效率差异会很有趣
  • 我忘记了SUBSTR,不错的解决方案,谢谢。
【解决方案2】:

一种解决方案是创建一个用户定义的函数,允许您使用 Python 模块中的正则表达式,请参阅此处的说明 https://stackoverflow.com/a/8338515/4197505

那么你可以这样做:

WHERE LastName REGEXP '^[B-L]'

【讨论】:

  • 不幸的是,根据文档 (sqlite.org/lang_expr.html#regexp) “默认情况下未定义 regexp() 用户函数,因此使用 REGEXP 运算符通常会导致错误消息”。另外我正在使用 JDBC Xerial 驱动程序,它 (github.com/xerial/sqlite-jdbc/issues/60) 也没有实现 REGEXP。
  • @qalis,我的错是自定义函数。我编辑了我的答案
  • 所以似乎没有内置功能 - 好吧,我可以忍受,无论如何感谢你为我指明了正确的方向。
  • 它现在内置在 sqlite3 shell 中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2023-03-06
  • 2013-07-15
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多