SQL-Select 小数字段不起作用

SQL-Select with decimal field not working

我在 Postgres 中有一个带有小数字段的 table 该字段的值为39.95

我尝试进行 SQL-查询以获取所有值为 39.95

的记录

这是我的代码:

SELECT CR_Sale.id , CR_Sale.sale_date, ROUND(CR_Sale.sale_bruto_total, 2) 
    AS sale_bruto_total, CR_Sale.sale_ticket
FROM crm_CR_Sale CR_Sale
WHERE sale_bruto_total = 39.95
ORDER BY sale_timestamp DESC;

当我执行查询时,没有找到任何结果。 如果我将代码更改为

WHERE sale_bruto_total <= 39.95

我得到一个结果,可以看到值为 39.95 的记录

我做错了什么? 谢谢

尝试如下:-

SELECT CR_Sale.id , CR_Sale.sale_date, ROUND(CR_Sale.sale_bruto_total, 2) 
    AS sale_bruto_total, CR_Sale.sale_ticket
FROM crm_CR_Sale CR_Sale
WHERE sale_bruto_total = CAST(39.95 AS dec(5,2))
ORDER BY sale_timestamp DESC;

注意:- 'sale_bruto_total'列应该是小数类型

数字 39.95 不是 decimal 值而是 float 并且由于 float 的内部精度,您无法进行相等比较(这就是为什么首先有 decimal 数据类型的原因)所以你必须添加一个显式转换:

sale_bruto_total = 39.95::decimal(5,2)

另外,如果sale_bruto_total的值正好 39.95因为字段定义为decimal后两位小数点,那么您就不需要 select 列表中的 round() 函数。另一方面,如果有更多的小数点,那么您也需要在过滤器中使用 round() 函数。所以要么:

SELECT id, sale_date, round(sale_bruto_total, 2) AS sale_bruto_total, sale_ticket
FROM crm_CR_Sale
WHERE round(sale_bruto_total, 2) = 39.95::decimal(5,2)
ORDER BY sale_timestamp DESC;

SELECT id, sale_date, sale_bruto_total, sale_ticket
FROM crm_CR_Sale
WHERE sale_bruto_total = 39.95::decimal(5,2)
ORDER BY sale_timestamp DESC;