如何查询精度太高的美元金额?

时间:2014-03-12 17:11:17

标签: sql sql-server precision modulo

我有以下表架构:

CREATE TABLE [items] (
    [qty] INT NOT NULL,
    [price] MONEY NOT NULL,
    [subtotal] MONEY NOT NULL,
    ...
);

有些行看起来像这样:

+--------+-------+----------+
| qty    | price | subtotal |
+--------+-------+----------+
| 100000 | 0.017 | 1700.00  |
+--------+-------+----------+

我不喜欢小数美分而且这些数据并不重要,因此我想调整任何具有小数分价格的行。所以我将上面的示例行改为:

+-----+---------+----------+
| qty | price   | subtotal |
+-----+---------+----------+
| 1   | 1700.00 | 1700.00  |
+-----+---------+----------+

如果我使用此查询:

SELECT * FROM [items]
WHERE ([price] * 1000) % 10 > 0

...这会让我得到价格超出精确度3的所有行。这对于这个价格为1.7¢的例子很有用。但如果它是0.002¢(即精度5)怎么办?我是否需要为每个我认为可能的精度编写带有一堆OR语句的查询,或者是否有更简单的方式来说WHERE [price] (has precision ≥ 3)

1 个答案:

答案 0 :(得分:4)

您可以round将价格提高到两位小数,然后将其与原始值进行比较:

WHERE ROUND([price], 2) <> [price]