【问题标题】:Combine CONCAT and RTRIM in WHERE SQL在 WHERE SQL 中结合 CONCAT 和 RTRIM
【发布时间】:2014-07-31 14:22:54
【问题描述】:

我现在有点麻烦,不知道如何解决这个问题。

先介绍一些背景信息:

我有一个包含 71k 条记录的表,其中包含 firstnamelastname 列。客户希望能够结合名字和姓氏进行搜索。

我使用了这个查询,它工作正常:

select * 
from `subscribers` 
where `subscribers`.`deleted_at` is null 
  and concat   (firstname," ",lastname) = 'firstname lastname'

除了以下问题:

有些记录的名字后面有一个尾随空格。这使得上述查询不起作用,除非我在名字和姓氏之间添加第二个空格。

我知道我必须在我的 firstname 上使用 RTRIM,我尝试过,但似乎不起作用。

我做错了什么?我怎样才能解决这个问题? 我宁愿不编辑 71k 条记录,这样他们的名字后面就没有尾随空格了......

感谢您的帮助!

【问题讨论】:

  • 您可以一口气更新它们:UPDATE subscribers SET firstname = RTRIM(firstname)。这可能就是我会做的 - 修复数据而不是解决它......
  • 但是使用你已经使用的方法,它看起来像concat (RTRIM(firstname)," ",lastname)

标签: mysql sql concat


【解决方案1】:

这应该可以工作(见SQL Fiddle demo):

select * from `subscribers` 
where `subscribers`.`deleted_at` is null 
  and concat (trim(firstname)," ",trim(lastname)) LIKE 'firstname lastname';

【讨论】:

  • 我认为姓氏更有可能还有尾随空格而不是前导空格,并且因为您将 = 更改为 LIKE 不再有效,即使它在 OP 的版本中也有效.
  • 我在我的数据库中尝试了您的答案,但由于某种原因它无法正常工作。我可能需要 MyISAM 而不是 InnoDB 之类的吗?
  • 好的,我发现了问题,显然不是空格,而是记录的中断。我不知道他们是怎么把它弄进去的,但这比我预期的还要糟糕。谢谢你们的帮助!
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2013-03-09
  • 2021-07-04
  • 2013-02-14
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多