带有字符串连接的 Firebird 查询和 where 子句中的 like 不起作用

Firebird query with string concatenation and like in the where clause doesn't work

我有一个用户 table 有名字和姓氏。我想为 'clark kent' 这样的字符串查找用户。 我这样做

SELECT * FROM user WHERE fisrt_name || ' ' || last_name LIKE '%clark kent%'

但我没有任何结果。 为什么?如果我搜索 'clark' 或 'kent' 它有效。

尝试

SELECT *
  FROM user
 WHERE upper(fisrt_name) LIKE '%CLARK%'
   and upper(last_name)  LIKE '%KENT%'

解决方案:

SELECT *
  FROM user
 WHERE TRIM("first_name") || ' ' || TRIM("last_name") LIKE '%clark kent%'; 

根据 OP 的评论,困难在于 first_namelast_name 是 CHAR 而不是 VARCHAR 字段,这意味着字段被 space 填充到它们的长度。也就是说,存储为 CHAR(8) 的字符串 'clark''clark[sp][sp][sp]'.

将字段连接在一起形成 "full name" 时,生成的字符串具有意外的 space:'clark[sp][sp][sp][sp]kent[sp][sp][sp][sp]'.

(顺便说一句,在严格的 SQL 中,CHAR 列相当违反直觉。它们 比较 而不考虑 space 填充,但是LIKE 运算符不会忽略 space 填充。请参阅 Firebird FAQ。)