postgresql - 为什么%不返回完全匹配?

时间:2011-05-17 19:52:06

标签: sql postgresql

查询:

SELECT users.* FROM "users" WHERE (lower(fname) || ' ' || lower(lname) LIKE '%jeff bat%') LIMIT 25

不返回fname:jeff和lname:bat

的用户

但如果你跑

SELECT users.* FROM "users" WHERE (lower(fname) || ' ' || lower(lname) LIKE '%jeff ba%') LIMIT 25

如果关闭一个字符,它会返回该用户。为什么%LIKE不返回完全匹配?如何更新查询以包含完全匹配?感谢

4 个答案:

答案 0 :(得分:0)

您应该通过在查询中包含trim功能来获得确切的结果,如下所示

SELECT users.* FROM "users" WHERE (trim(lower(fname)) || ' ' || trim(lower(lname)) LIKE '%jeff ba%')

答案 1 :(得分:0)

显然你需要修剪,因为@kanchirk说:

应该这样做或以这种方式尝试

SELECT users.* 
FROM "users" 
WHERE lower(trim(fname)) LIKE '%jeff %'  
AND lower(trim(lname)) LIKE '%bat%') 
LIMIT 25

答案 2 :(得分:0)

我自己的预感是kanchirk的诊断,有一个转折点:除了修剪之外,任何一个案例敏感性的可能性还会增加其丑陋的头部吗?

答案 3 :(得分:-2)

结尾处的%表示名称的“Bat”部分中有更多字符。所以“Bats”,“Batch”和“Batty”会匹配,但“Bat”不会,因为它在“t”之后没有任何东西。从理论上讲,%匹配0+个字符,但这似乎不会发生在这里。