我有这个简单的表和用户记录。
我只想让具有 ilike 或其他东西的用户在 PostgreSQL 10.12 中获得更好的顺序。
CREATE TABLE users(
ID INT PRIMARY KEY NOT NULL,
username CHAR(50) NOT NULL
);
INSERT INTO users (id, username) VALUES(1,'mandela');
INSERT INTO users (id, username) VALUES(2,'delpiero');
INSERT INTO users (id, username) VALUES(3, 'gondela');
INSERT INTO users (id, username) VALUES(4, 'del');
INSERT INTO users (id, username) VALUES(5, 'dell');
INSERT INTO users (id, username) VALUES(6, 'andel');
当我查询“del”时,我想首先获得 id 为 4 的“del”用户。可以按长度排序。但这仍然不是我想要的。顺序应该是这样的。二阶必须是“dell”,三阶必须是“delpiero”,第四阶是“andel”,第五阶是“gondela”,第六阶是“mandela”。
select * from users where username ilike '%del%' order by length(users.username) asc;
在我看来,您首先想要领先的匹配,然后是最短的字符串,最后是字母排序顺序:
db<>在这里摆弄
NOT ILIKE 'del%'
因为false
排序之前true
。看:旁白:永远不要使用
char(n)
. 看:也许是这样的:
但是“贡德拉”和“曼德拉”之间的联系是在什么基础上打破的呢?