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

时间:2015-08-05 14:55:29

标签: firebird string-concatenation sql-like firebird2.5

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

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

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

2 个答案:

答案 0 :(得分:3)

解决方案:

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

根据OP的评论,难点是first_namelast_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%'