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;
我在 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;