SQL 获取所有小数点后3位以上的数字

SQL to get all number that have more than 3 digits after the decimal point

我想得到所有小数点后超过 3 位的数字。

例如,我有一个名为 ARTICLE 的 table,它有两列:namevarchar 类型)和 pricenumber).

我想获取存储在 table ARTICLE 中的所有记录,其中 price 列值的小数点后有超过 3 个数字。

例如,ARTICLE.price 等于 12.9584 或 45.874521 的值将被返回,因为它们的小数点后有 3 个以上的数字。

请问我怎样才能做到这一点?

我尝试了这个请求,但它不正确:

select name, price 
from ARTICLE 
where length(TO_CHAR(price)) > 7;

谢谢

您只能对数字进行操作:

where trunc(price * 1000) - price * 1000 <> 0

我没有 table 来测试这个,但你可以使用:

Select Name, Price
From Article
Where Price like '%#.###%'

也就是说,小数点前至少要有1个数字,小数点后至少要有3个数字。有关以下通配符的更多信息:

https://www.w3schools.com/sql/sql_wildcards.asp

希望这对您有所帮助!

与@Krzysztof 的解决方案类似:

CREATE TABLE article (name VARCHAR2(10), price NUMBER);

INSERT INTO article VALUES ('a', 12.9584);
INSERT INTO article VALUES ('b', 45.874521);
INSERT INTO article VALUES ('c', 0.123);


SELECT * FROM article WHERE ABS(price - TRUNC(price,3)) > 0;

NAME    PRICE
   a    12,9584
   b    45,874521

使用 ROUND 函数 - 您正在寻找 不等于三位数舍入值的数字

例子——你测试数据

select round(2/3,rownum) price from dual connect by level <= 5

     PRICE
----------
,7        
,67       
,667      
,6667     
,66667 

查询小数点后3位以上的数字

with dt as (
select round(2/3,rownum) price from dual connect by level <= 5
)
select price from dt
where price != round(price,3)

     PRICE
----------
,6667     
,66667