我想在sqlite中使用正则表达式,但是不知道怎么做。
我的表格有一个列,其中包含像这样的字符串:“3,12,13,14,19,28,32”。 现在,如果我输入“where x LIKE '3'”,我也会得到包含值13或32之类的行, 但是我只想得到具有该字符串中确切值3的行。
有人知道如何解决这个问题吗?
我想在sqlite中使用正则表达式,但是不知道怎么做。
我的表格有一个列,其中包含像这样的字符串:“3,12,13,14,19,28,32”。 现在,如果我输入“where x LIKE '3'”,我也会得到包含值13或32之类的行, 但是我只想得到具有该字符串中确切值3的行。
有人知道如何解决这个问题吗?
WHERE x REGEXP '(^|\D{1})3(\D{1}|$)'
WHERE x REGEXP '(^|,)(3)(,|$)'
当x在以下情况下,这将精确匹配3:
其他示例:
WHERE x REGEXP '(^|,)(3|13)(,|$)'
这将匹配3或13
SQLite 3.36.0 版本已于2021年6月18日发布,现在已内置 REGEXP 命令。 只适用于 CLI 构建。
sqlean-regexp
扩展,该扩展提供正则表达式搜索和替换功能。-- select messages containing number 3
select * from messages
where msg_text regexp '\b3\b';
-- count messages containing digits
select count(*) from messages
where msg_text regexp '\d+';
-- 42
select regexp_like('Meet me at 10:30', '\d+:\d+');
-- 1
select regexp_substr('Meet me at 10:30', '\d+:\d+');
-- 10:30
select regexp_replace('password = "123456"', '"[^"]+"', '***');
-- password = ***
你可以使用正则表达式,但这是一种愚蠢的方式来进行精确匹配。
你应该只需说WHERE x = '3'
。
请参见Havalite如何完成此操作(RegExp in SqLite using Php)
如果有人在寻找非正则表达式的 Android Sqlite 条件,比如这个字符串 [1,2,3,4,5]
,那么不要忘记在 @phyatt 的条件中加上括号 ([]),同样适用于其他特殊字符,比如圆括号 ({})
WHERE ( x == '[3]' OR
x LIKE '%,3]' OR
x LIKE '[3,%' OR
x LIKE '%,3,%');
针对Rails
db = ActiveRecord::Base.connection.raw_connection
db.create_function('regexp', 2) do |func, pattern, expression|
func.result = expression.to_s.match(Regexp.new(pattern.to_s, Regexp::IGNORECASE)) ? 1 : 0
end
using SQLite
using DataFrames
db = SQLite.DB("<name>.db")
register(db, SQLite.regexp, nargs=2, name="regexp")
SQLite.Query(db, "SELECT * FROM test WHERE name REGEXP '^h';") |> DataFrame
有一个名为sqlite_jq的SQLite扩展(https://github.com/mgdm/sqlite-jq),它允许使用jq的正则表达式函数,这些函数比SQLite的更强大,如下面两个示例中所建议的。
使用test_table.sql创建的表格(https://github.com/mgdm/sqlite-jq/blob/main/test_table.sql)
sqlite> select jq(raw,'.[]|select(.id|test("6$") ).id' ) from test;
24583836616
sqlite> select jq(raw,'.[] | .actor.avatar_url | capture("https://(?<domain>[^.]*)")' ) from test;
[{"domain":"avatars"},{"domain":"avatars"}]
jq_each()
的表值函数。
很棒的是,jq()
函数被标记为“确定性”的,因此可以在“CREATE INDEX”命令中使用。