【问题标题】:Oracle plsql how to check if number has decimal pointsOracle plsql如何检查数字是否有小数点
【发布时间】:2016-09-20 09:39:46
【问题描述】:

刚开始使用 toad ide 使用 oracle。尝试以特定格式格式化表格中的数字。这些数字来自表中的一个变量,我想将整数显示为整数并将浮点数显示为浮点数。到目前为止,我可以使用trim(TO_CHAR (width,'999.999')) 来显示所有带小数点的数字。

例如:123.5 将显示为 123.500,100 将显示为 100.000。

我想要做的是显示例如:100 为 100。

希望这很清楚,我很快就会得到解决方案。

【问题讨论】:

  • 我建议用“TOAD”标记您的问题并删除“PL/SQL”。
  • TOAD 根据您 PC 的本地设置显示数字和日期,无论您是否使用 TO_CHAR(...) 表达式。您必须在 Windows“区域和语言”设置中进行设置。

标签: oracle toad


【解决方案1】:

如果您的问题与 Toad 显示数字的方式有关,您可以按照 cmets 中的提示进行操作。

如果问题是关于 Oracle 显示数字的方式,将它们转换为字符串,也许这会有所帮助:

SQL> select to_char(1.5, 'TM9') as num from dual union all
  2  select to_char(100, 'TM9') from dual;

NUM
----------------------------------------------------------------
1,5
100

您可以在documentation 中找到更多信息

如果您需要一种方法来检查一个数字是否有小数部分,您可以简单地尝试:

SQL> with numbers(num) as (
  2        select 1.5 from dual union all
  3        select 100 from dual
  4      )
  5  select case
  6          when floor(num) = num
  7              then to_char(num, 'FM999999') || ' has not a decimal part'
  8          else
  9              to_char(num, 'FM9999D000') || ' has a decimal part'
 10         end as checkString
 11  from numbers;

CHECKSTRING
------------------------------
1,500 has a decimal part
100 has not a decimal part

【讨论】:

  • 嘿,我知道这是为单独的变量做的方式。我有一个表中的值列表,需要根据值以不同方式显示。例如:列表有各种值,如 100、110.5、240.2。所以我想要做的是将 100 显示为 100 但带有小数点的值,如 110.500 和 240.200
  • 嘿伙计,我尝试执行你在 toad 编辑器上提供的内容,它给了我这个错误 ORA-32033:不支持的列别名,它突出显示第一行
  • 哪个oracle版本?如果低于 11,请尝试将with numbers(num) as ( select 1.5 编辑为with numbers as ( select 1.5 as num。这在 11G 上运行良好
【解决方案2】:

我正在使用 MOD 来确定小数。

select test_value, (case when mod(test_value,1) != 0 then 'DECIMAL' else 'NODECIMAL' END) IS_DECIMAL
  from (select 1.5 test_value from dual 
        union all 
        select 100 test_value from dual) test_table

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多