Sqlite:Sql找到最完整的前缀

mys*_*mic 0 sql sqlite

我有一个sqlite表包含可变长度数字前缀的记录.我希望能够以最有效的方式找到最完整的前缀与另一个可变长度的数字:

例如.该表包含一个名为prefix的列,其中包含以下数字:

1. 1234
2. 12345
3. 123456
Run Code Online (Sandbox Code Playgroud)

什么是有效的sqlite查询,以找到第二个记录作为12345999最完整的匹配.

谢谢.

Cow*_*wan 6

这里一个巧妙的技巧是反转一个LIKE条款 - 而不是说

WHERE prefix LIKE '...something...'
Run Code Online (Sandbox Code Playgroud)

正如您经常做的那样,通过在结尾附加%并将其作为固定字符串与输入进行比较,将前缀转换为模式.按前缀长度降序排序,并选择前1个结果.

我之前从未使用过Sqlite,但只是下载了它,这很好用:

sqlite> CREATE TABLE whatever(prefix VARCHAR(100));
sqlite> INSERT INTO WHATEVER(prefix) VALUES ('1234');
sqlite> INSERT INTO WHATEVER(prefix) VALUES ('12345');
sqlite> INSERT INTO WHATEVER(prefix) VALUES ('123456');
sqlite> SELECT * FROM whatever WHERE '12345999' LIKE (prefix || '%') 
        ORDER BY length(prefix) DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

输出:

12345
Run Code Online (Sandbox Code Playgroud)