忽略负数字符号SQL SERVER

时间:2017-11-09 11:00:48

标签: sql sql-server negative-number

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

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,因为这可能反映了信用等......

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

有人可以给我任何建议吗?感谢

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

2 个答案:

答案 0 :(得分:2)

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

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)

希望这会对你有所帮助。

答案 1 :(得分: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)