【问题标题】:PostgreSQL Join not working with special CharactersPostgreSQL Join 不适用于特殊字符
【发布时间】:2016-09-13 09:12:12
【问题描述】:

我有一个数据库表(例如 Book),其中包含列名(字符不同)部分。我将数据从 csv 导入到该表中。不幸的是,在 CSV 的名称列中,几乎所有行都包含一些特殊字符,例如 /_

现在我有另一个 csv,其中包含 2 列,它们是导入的无效名称列和作为另一列的正确名称值。我将其导入到我创建的新表中,更新后我将删除该表。当我尝试合并表进行更新时,带有特殊字符的列不显示。

select b.name from Book b JOIN tempBook tb on b.name= tb.invalid_name;

返回 0 行,但手动检查确认这两个值对于几百列是相同的。

我无法删除数据并将数据重新导入到 Book 表,因为它是实时数据并且其他列已被修改。有没有办法查询和匹配两个匹配列都包含特殊字符的表?

编辑

样本数据

Book
HarryN/APotter

tempBook
HarryN/APotter

但之前添加的查询返回 0 个结果。我期待结果是

HarryN/APotter

【问题讨论】:

  • 添加一些示例表数据。和预期的结果!
  • 在编辑下添加示例数据
  • 也许其中一个字段有尾随空格? (或两者)尝试:... on TRIM(b.name) = TRIM(tb.invalid_name);
  • 我试过TRIM,我喜欢,还是不行。如果有帮助,该列的类型是字符类型。
  • @user99560:包含特殊字符的是 data 列而不是 name 列。

标签: sql postgresql


【解决方案1】:

您可能还有其他不寻常的角色。我将替换 valid 名称中的空格并将其用于比较:

select b.name
from Book b JOIN
     tempBook tb
     on tb.invalid_name like '%' || replace(b.name, ' ', '%') || '%';

这不会很有效。但是,它可以帮助您开始找出问题所在。

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 2016-03-03
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2020-04-02
    • 2021-09-05
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多