【问题标题】:SQL to get all number that have more than 3 digits after the decimal pointSQL获取小数点后超过3位的所有数字
【发布时间】:2021-04-07 16:32:49
【问题描述】:

我想获取所有小数点后超过 3 位的数字。

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

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

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

请问我该如何实现?

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

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

谢谢

【问题讨论】:

标签: sql oracle oracle11g


【解决方案1】:

使用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   

【讨论】:

    【解决方案2】:

    得出与@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
    

    【讨论】:

      【解决方案3】:

      您只能对数字进行操作:

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

      【讨论】:

      • 谓词可能被简化为price &lt; 0,这可能不是本意……可能是trunc而不是abs的意思?
      • 当然,感谢您指出这一点。尽管负价格可能看起来很奇怪,但并未说明它不能低于零。在这种情况下,使用&lt;&gt; 比较会更安全。
      【解决方案4】:

      我没有可以测试的表格,但您可以使用:

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

      这表示小数点前必须至少有 1 个数字,小数点后必须至少有 3 个数字。有关以下通配符的更多信息:

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

      希望这会有所帮助!

      【讨论】:

      • 您应该明确地设置一个测试数据库并在发布之前检查您的解决方案是否有效。这是收集投票的最可靠方法;)如果您发现它没有提供预期的结果,只需放弃答案。这将保护您免受错误答案的反对。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2012-02-01
      相关资源
      最近更新 更多