分享
三行代码  ›  专栏  ›  技术社区  ›  Adgy

SQL选择一个字段等于另一个字段,但中间有一个附加字符

  •  0
  • Adgy  · 技术社区  · 3 天前

    我有两个发票数据表,我试图使用其中一个更新另一个,基于一个订单号。

    UPDATE Reconcile
    SET Reconcile.Customer = Invoices.Customer,
    Reconcile.InvoiceNum = Invoices.InvoiceNumber
    FROM Invoices
    WHERE Reconcile.PONumber = Invoices.PONum
    

    很简单。我的问题是,采购订单号并不总是完全匹配。他们中的一些人有一个冲刺。所以不是仅仅 FM000112345678 FM0001-12345678 ,但我仍然需要匹配它们。我在SELECT中测试了一些子字符串查询,但没有成功。

    SELECT * FROM Reconcile AS A
    WHERE A.PONumber IN (
    SELECT DISTINCT PONum
    FROM Invoices AS B
    WHERE (B.PONum LIKE (SUBSTRING(A.PONumber,0,5) + '%'))
    AND B.PONum LIKE ('%' + SUBSTRING(REVERSE(A.PONumber),0,8)))
    

    SELECT * FROM Reconcile AS A
    WHERE A.PONumber IN (
    SELECT DISTINCT PONum
    FROM Invoices AS B
    WHERE (B.PONum LIKE (SUBSTRING(A.PONumber,0,5) + '%'))
    AND B.PONum LIKE (RIGHT(A.PONumber,CHARINDEX('-',REVERSE(A.PONumber))-1)))
    

    仍然没有结果。很明显我遗漏了一些东西。

    1 回复  |  直到 3 天前
        1
  •  3
  •   Gordon Linoff    3 天前

    如果问题只是连字符,可以使用 replace() :

    WHERE REPLACE(Reconcile.PONumber, '-', '') = REPLACE(Invoices.PONum, '-' ,'')