【问题标题】:Ignoring negative number sign SQL SERVER忽略负数符号 SQL SERVER
【发布时间】:2018-04-22 08:17:05
【问题描述】:

我希望退回彼此不同的金额。我正在处理这些数据:

Amount  InvoiceNumber   Amount2    InvoiceNumber2
1233.99       1          -1233.99        1
567.99        2          567.99          2
-3335.99      3          -3335.99        3
-3335.99      4          4000.99         4

现在,我正在寻找这样的结果

Amount  InvoiceNumber   Amount2 InvoiceNumber2
-3335.99       4        4000.99       4

我想通过忽略 - 符号但仍将 - 符号保留在结果中来返回彼此不同的值。例如。我想保留 1233 和 -1233 因为这可能反映了信用等...

我实际处理的日期包含小数位,我不能使用正确的语法,因为数字的大小会有所不同。我以为我可以使用左语法,但我需要跳过 - 符号。

谁能给我任何建议?谢谢

sql 小提琴 - http://sqlfiddle.com/#!6/31ee0/7

尝试:

SELECT I.Amount, I.InvoiceNumber,
I2.Amount2, I2.InvoiceNumber2
FROM Invoice I 
JOIN Invoice2 I2 ON I.InvoiceNumber = I2.InvoiceNumber2
WHERE RIGHT(I.Amount,3) <> RIGHT(I2.Amount2,3)

【问题讨论】:

  • 做 AND 而不是 WHERE,因为它是一个连接条件。

标签: sql sql-server negative-number


【解决方案1】:

删除where 子句,你可以通过这种方式实现它

SELECT I.Amount, I.InvoiceNumber,
I2.Amount2, I2.InvoiceNumber2
FROM Invoice I 
JOIN Invoice2 I2 ON I.InvoiceNumber = I2.InvoiceNumber2
and I.Amount <> I2.Amount2

-- 如果你想忽略 -sign 使用ABS函数

SELECT I.Amount, I.InvoiceNumber,
I2.Amount2, I2.InvoiceNumber2
FROM Invoice I 
JOIN Invoice2 I2 ON I.InvoiceNumber = I2.InvoiceNumber2
and abs(I.Amount) <> abs(I2.Amount2)

【讨论】:

    【解决方案2】:

    您可以在 SQL Server 中使用 ABS 来跳过 - 符号。

    SELECT I.Amount, I.InvoiceNumber,
    I2.Amount2, I2.InvoiceNumber2
    FROM Invoice I 
    JOIN Invoice2 I2 ON I.InvoiceNumber = I2.InvoiceNumber2
    WHERE ABS(I.Amount) <> ABS(I2.Amount2)
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多