我有一个名字和姓氏的用户表。我想找一个像'clark kent'这样的字符串的用户。 我这样做
SELECT * FROM user WHERE fisrt_name || ' ' || last_name LIKE '%clark kent%'
但我没有任何结果。 为什么?如果我搜索'clark'或'kent'就行了。
答案 0 :(得分:3)
解决方案:
SELECT *
FROM user
WHERE TRIM("first_name") || ' ' || TRIM("last_name") LIKE '%clark kent%';
根据OP的评论,难点是first_name
和last_name
是CHAR而不是VARCHAR字段,这意味着字段按空间填充到它们的长度。也就是说,存储为CHAR(8)的字符串'clark'
是'clark[sp][sp][sp]'
。
将字段连接在一起形成"全名"时,结果字符串会出现意外的空格:'clark[sp][sp][sp][sp]kent[sp][sp][sp][sp]'
。
(顺便说一句,在严格的SQL中,CHAR列相当直观。它们比较而不考虑空间填充,但是LIKE运算符不会忽略空间填充。请参阅{{3 }}。)
答案 1 :(得分:0)
尝试
SELECT *
FROM user
WHERE upper(fisrt_name) LIKE '%CLARK%'
and upper(last_name) LIKE '%KENT%'