【问题标题】:SQL Select where one field equals another, but with an additional character in the middleSQL Select 其中一个字段等于另一个字段,但中间有一个附加字符
【发布时间】:2020-07-06 13:00:02
【问题描述】:

我有 2 个发票数据表,我正在尝试使用其中一个来根据 PO 编号更新另一个。

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

足够简单。我的问题是 PO 编号并不总是完全匹配。其中一些有破折号。因此,我可能有 FM0001-12345678,而不是只匹配 FM000112345678,但我仍然需要匹配它们。我一直在 SELECT 中测试一些 SUBSTRING 查询,但没有成功。

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)))

这不会返回任何结果。我尝试使用 CHARINDEX。

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)))

仍然没有结果。我显然错过了一些东西。 任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server select substring where-in


    【解决方案1】:

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

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

    【讨论】:

    • 天啊。现在看来如此明显。谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多