【问题标题】:How to find values with certain number of decimal places using SQL?如何使用 SQL 查找具有一定小数位数的值?
【发布时间】:2020-02-21 09:29:41
【问题描述】:

我正在尝试找出一种方法,使用 SQL 来查询小数点后 5 位或更多位的值。换句话说,我只想查看小数点后 5 位以上的结果(例如 45.324754)——小数点前的数字无关紧要,但是,我仍然需要查看完整的数字。这可能吗?如有帮助,请提供任何帮助。

【问题讨论】:

  • 当然。您使用什么数据库引擎?
  • 谢谢大家。将在星期一尝试这些解决方案。

标签: sql


【解决方案1】:

假设您的 DBMS 支持 FLOOR 并且您的数据类型转换模型支持这种乘法,您可以这样做:

SELECT *
FROM Table
WHERE FLOOR(Num*100000)!=Num*100000

这具有不需要转换为字符串数据类型的优点。

【讨论】:

    【解决方案2】:

    在 SQL Server 上,您可以指定:

    SELECT *
    FROM Table
    WHERE Value <> ROUND(Value,4,1);
    

    对于 ANSI 方法,您可以使用:

    SELECT *
    FROM Table
    WHERE Value <> CAST(Value*100000.0 AS INT) / 100000.0;
    

    虽然如果您处理大量数字,这种方法可能会导致溢出。

    【讨论】:

      【解决方案3】:

      我想大多数 DBMS 都有 round 函数

      SELECT * 
      FROM YourTable 
      WHERE YourCol <> ROUND(YourCol,4)
      

      【讨论】:

        【解决方案4】:

        这在 SQL Server 中对我有用:

        SELECT * 
            FROM YourTable
            WHERE YourValue LIKE '%._____%';
        

        【讨论】:

        • 这也将匹配1.00000,这可能不是所需要的,因为这是数据类型而不是值的函数。
        【解决方案5】:
        select val
        from tablename
        where length(substr(val,instr(val, '.')+1)) > 5
        

        这是在 oracle 中使用 substrinstr 的一种方法

        【讨论】:

          【解决方案6】:

          您可以使用下面的解码语句来识别数据库表中存在的最大小数

          SELECT max(decode(INSTR(val,'.'), 0, 0, LENGTH(SUBSTR(val,INSTR(val,'.')+1)))) max_decimal 
          FROM tablename A;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-10
            • 2020-04-03
            • 2016-05-05
            • 2022-08-23
            • 2019-09-30
            • 1970-01-01
            • 2014-07-02
            • 1970-01-01
            相关资源
            最近更新 更多