【问题标题】:how to use replace on a left join statement如何在左连接语句上使用替换
【发布时间】:2020-03-05 13:15:45
【问题描述】:

我有两张表,其中一张有一个字段,其中包含类似“1111AAA”的字符串,另一张有相同的字段,但结构为“1111 AAA”。我想用''替换空格,但在左连接的ON附近出现错误。

我把代码放在下面:

select idticket, bt.matricula, bv.vehicle
from b_ticket bt
left JOIN b_vehicle bv ON REPLACE(bv.matricula, ' ', '') ilike ON REPLACE(bt.matricula, ' ', '')
where date_start >= '2019/01/01/'
and date_end <= '2020/01/01'

我无法更改这两个表中任何一个的值。而且我也尝试了TRIM函数,但它不起作用,因为它删除了字符串开头和结尾的空格,而不是单词之间的空格。

有什么想法吗?

谢谢!

错误信息: 错误:«ON»附近的sintax错误 第 3 行:... bv ON REPLACE(bv.matricula, ' ', '') ilike ON REPLACE...

【问题讨论】:

  • 您能否发布您在发出查询时遇到的错误(复制粘贴)
  • 我添加了错误信息:)

标签: string postgresql replace left-join trim


【解决方案1】:

您的JOIN 子句中很可能有一个无关的ON 关键字:

SELECT
    idticket, bt.matricula, bv.vehicle
FROM
    b_ticket AS bt LEFT JOIN b_vehicle AS bv
        ON REPLACE(bv.matricula, ' ', '') ILIKE REPLACE(bt.matricula, ' ', '')
WHERE
    date_start >= '2019/01/01/' AND date_end <= '2020/01/01';

如错误所述:谓词必须是任何有效的布尔表达式,但其中不能有 ON 关键字。

【讨论】:

  • 哦...是的,我重复了,谢谢,我看了大约 30 分钟,我没有看到那个错误...谢谢!
  • @Imrik,是的,它发生了。仔细阅读错误必须是第一步。使用缩进和排版规则也有很大帮助,因为它增加了可读性并便于维护。祝你有美好的一天!
【解决方案2】:

这不是有效的 SQL:

left JOIN b_vehicle bv 
    ON REPLACE(bv.matricula, ' ', '') ilike ON REPLACE(bt.matricula, ' ', '')

每个JOIN 应该只有一个ON。大概,你想要:

left JOIN b_vehicle bv 
    ON REPLACE(bv.matricula, ' ', '') ilike REPLACE(bt.matricula, ' ', '')

【讨论】:

  • 哦...是的,我重复了,谢谢,我看了大约 30 分钟,我没有看到那个错误...谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多