Sqlite 匹配通配符前的特定字符
Sqlite match specific characters before wildcard
在从 MS Access 过渡到 Sqlite 的过程中,我遇到了一个小问题
以下 [,. ]%
在 MS Access 中可以很好地匹配单词后的字符逗号、句点和 space,但在 Sqlite 中则不行。
例如,对于字典短语“aaa, bbb ccc
”和“aaa, bbbbbb ccc
”,如果用户键入“aaa bbb
”,它将变为“aaa[,. ]%bbb
”,然后它进入 SELECT * FROM mytable WHERE text LIKE ?
。这在 Sqlite 中不起作用,但在 MS Access 中起作用。另外我只希望 select 第一个字典短语,而不是第二个。
所以,我的问题是如何在 Sqlite 中匹配一组字符?
编辑:我无法使用正则表达式,所以我想要一个没有正则表达式的解决方案
据我所知,你不能,你需要使用 REGEXP
。
我能想到的最好的事情是这样的:
select *
from t
where replace(replace(txt, ',', ''), '.', '') like 'aaa bbb%';
这不会涵盖 aaa,bbbb
或 aaa bbbb
。
在标准SQL中,LIKE没有字符类。
在 SQLite 中,您可以使用 GLOB 代替:
... WHERE text GLOB 'aaa[,. ]*bbb'
(GLOB 区分大小写。)
在从 MS Access 过渡到 Sqlite 的过程中,我遇到了一个小问题
以下 [,. ]%
在 MS Access 中可以很好地匹配单词后的字符逗号、句点和 space,但在 Sqlite 中则不行。
例如,对于字典短语“aaa, bbb ccc
”和“aaa, bbbbbb ccc
”,如果用户键入“aaa bbb
”,它将变为“aaa[,. ]%bbb
”,然后它进入 SELECT * FROM mytable WHERE text LIKE ?
。这在 Sqlite 中不起作用,但在 MS Access 中起作用。另外我只希望 select 第一个字典短语,而不是第二个。
所以,我的问题是如何在 Sqlite 中匹配一组字符?
编辑:我无法使用正则表达式,所以我想要一个没有正则表达式的解决方案
据我所知,你不能,你需要使用 REGEXP
。
我能想到的最好的事情是这样的:
select *
from t
where replace(replace(txt, ',', ''), '.', '') like 'aaa bbb%';
这不会涵盖 aaa,bbbb
或 aaa bbbb
。
在标准SQL中,LIKE没有字符类。
在 SQLite 中,您可以使用 GLOB 代替:
... WHERE text GLOB 'aaa[,. ]*bbb'
(GLOB 区分大小写。)