带逗号的 Oracle 格式数字删除尾随零小数

     2023-04-14     200

关键词:

【中文标题】带逗号的 Oracle 格式数字删除尾随零小数【英文标题】:Oracle Format Number With Commas Remove Trailing Zero Decimals 【发布时间】:2020-04-24 16:27:56 【问题描述】:

在我的查询中,我试图用逗号输出数字,但我想删除小数点后的所有尾随零。例如:

3132000.00 -> 3,132,000

4321.10 -> 4,321.1

132.01 -> 132.01

我一直在使用 TO_CHAR,如果在数字末尾没有 .00,我就不能使用逗号。我试过的几个例子:

TO_CHAR(3132000, '999G999G990D00')) -> 3,132,000.00 -> 我想要的:3,132,000

TO_CHAR(1080000, 'TM')) -> 1080000 -> 我想要的:1,080,000

我已经搜索了高低的答案,但我还没有找到一种方法来使用逗号并删除零小数,这让我感到惊讶。我该怎么做?任何帮助将不胜感激。

【问题讨论】:

我不相信你。格式 '999G990D00' 不会产生结果 3,132,000.00。相反,它可能会显示类似###### 的内容。为什么?因为格式只有六位整数部分,而值有七位。如果您想被认真对待,请发布正确的示例。 我用随机数切换了我的字段并且没有更新格式。我更新了我的问题,以免冒犯其他人。 【参考方案1】:

唉,如果您必须在格式模型中使用组分隔符和小数分隔符,即使使用 'fm' 格式模型修饰符(使输出尽可能“短”),小数点仍然存在,即使输入是一个整数。这是因为 Oracle 将 D 解释为输出中的强制字符(小数分隔符)。

我们可能希望 Oracle 的设计者更聪明,他们在定义 'fm' 修饰符时会包含“删除整数的小数点”。他们不是。

除此之外,您的尝试中还有一些错误。您展示了整数部分有七位数字的示例,但您在格式模型中只包含了六位数字。 (您必须在格式模型中包含足够的数字以容纳输入数据中的最大数字。)您还在小数部分使用了 0,即使您不希望显示 0(如果不是)需要。这些应该是 9。

所以:您可以在不做额外工作的情况下做的最好的事情(但也请继续阅读“额外工作”解决方案):

with
  inputs (num) as (
    select 3132000.000 from dual union all
    select    4321.10  from dual union all
    select     132.01  from dual union all
    select 1080000     from dual
  )
select num, to_char(num, 'fm999G999G999D99') as str
from   inputs
;

          NUM STR            
------------- ---------------
      3132000 3,132,000.     
         4321 4,321.1        
          132 132.01         
      1080000 1,080,000.  

注意整数后面丑陋的小数点。正如我所解释的,你不能直接在格式模型中解决这个问题。

这是解决此问题的一种方法(事后需要额外的工作):

with
  inputs (num) as (
    select 3132000.000 from dual union all
    select    4321.10  from dual union all
    select     132.01  from dual union all
    select 1080000     from dual
  )
select num, rtrim(to_char(num, 'fm999G999G999D99'), '.') as str
from   inputs
;

          NUM STR            
------------- ---------------
      3132000 3,132,000      
         4321 4,321.1        
          132 132.01         
      1080000 1,080,000 

但是,这很烦人 - 事后我不应该做任何此类工作。有没有办法在使用 TO_CHAR 之前做一些准备工作?

答案是肯定的——我可以在格式模型参数中使用case 表达式。为了逻辑纯度,我更喜欢这个版本:

with
  inputs (num) as (
    select 3132000.000 from dual union all
    select    4321.10  from dual union all
    select     132.01  from dual union all
    select 1080000     from dual
  )
select num, to_char(num, case when num = trunc(num) then 'fm999G999G999'
                                    else 'fm999G999G999D99' end) as str
from   inputs
;

          NUM STR            
------------- ---------------
      3132000 3,132,000      
         4321 4,321.1        
          132 132.01         
      1080000 1,080,000

【讨论】:

BIG LIKE:“我们可能希望 Oracle 的设计者更聪明”感谢您提供的有用且非常彻底的回答!

如何从sqlplus中的数字列中删除小数点后的尾随零?

...据库表字段,其类型为number(38,8),在sqlplus中,我已将列格式化为“COLUMNAmountFORMAT99999999999 查看详情

删除小数点雪花后的尾随零

...2021-12-0111:24:52【问题描述】:我一直在尝试从小数点后的数字列中删除尾随零。例如:0.978219150000->0.978219150.650502591918->0.6505025919180.975479450000->0.97547945数据类型为NUMB 查看详情

删除前导零和尾随零并将结果保留到小数点后两位

...尾随零,并希望将结果保留到小数点后两位。例如:如果数字是0.01,我想看0.01;如果数字是0.010,我想看.01;如果数字是0.10,我想看到.10;如果数字是1,我 查看详情

格式化包含带前导零的小数点的数字

】格式化包含带前导零的小数点的数字【英文标题】:Formatanumbercontainingadecimalpointwithleadingzeroes【发布时间】:2011-11-1611:46:54【问题描述】:我想用前导零格式化一个带小数点的数字。这个>>>\'3.3\'.zfill(5)003.3考虑所有数字... 查看详情

使用 NSNumberFormatter 生成小数点后尾随零的数字

】使用NSNumberFormatter生成小数点后尾随零的数字【英文标题】:UsingNSNumberFormattertogeneratenumberwithtrailingzerosafterdecimal【发布时间】:2014-10-2805:57:44【问题描述】:在Swift中,您将如何创建一个NSNumberFormatter来保留小数点(12.000)后的尾... 查看详情

Google表格十进制数,如何删除逗号并添加零

】Google表格十进制数,如何删除逗号并添加零【英文标题】:GoogleSheetsDecimalNumbers,howtoremovecommasandaddzero【发布时间】:2020-07-1111:10:21【问题描述】:以下问题。我从网站获得的Google表格中有十进制数字。这些数字在小数点后有3... 查看详情

带逗号和两位小数的数值格式

】带逗号和两位小数的数值格式【英文标题】:Numbervalueformatwithcommaandtwodecimalpoints【发布时间】:2018-09-0223:30:29【问题描述】:我正在使用chart.js来显示我的销售额,问题是我无法将数据正确转换为带有逗号和两位小数的数字格... 查看详情

小数的 SQL 格式,用逗号表示小数,仅用于数字

】小数的SQL格式,用逗号表示小数,仅用于数字【英文标题】:SQLformatfordecimalwithcommatoindicatedecimals,onlytodigit【发布时间】:2018-05-1407:34:19【问题描述】:如何将十进制值转换为逗号?数字不带逗号来分隔1000,并且有逗号来表示... 查看详情

如何从 Pandas 日期时间索引中删除尾随零(根据需要格式化)?

】如何从Pandas日期时间索引中删除尾随零(根据需要格式化)?【英文标题】:HowtoremovetrailingzeroesfromPandasDatetimeIndex(reformatasperwish)?【发布时间】:2020-11-1300:34:30【问题描述】:我有一个带有日期时间索引的Pandas数据框,它在第... 查看详情

使用 RegEx 删除指数数字的尾随零

】使用RegEx删除指数数字的尾随零【英文标题】:RemovetrailingzerosforexponentialnumbersusingRegEx【发布时间】:2015-09-0821:19:42【问题描述】:使用正则表达式,如何删除1.0000000000e+12的尾随零?例如:1.0000000000e+12应该是:1e+121.0000000000e12... 查看详情

如何检查一个数字是不是有两位小数并在必要时保留尾随零?

】如何检查一个数字是不是有两位小数并在必要时保留尾随零?【英文标题】:Howtocheckifanumberhastwodecimalplacesandkeepthetrailingzeroifnecessary?如何检查一个数字是否有两位小数并在必要时保留尾随零?【发布时间】:2013-10-0423:54:58【问... 查看详情

如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?

】如何在WebApiIActionResultOk()函数中删除可空小数的尾随零?【英文标题】:HowtoremovetrailingzerosofnullabledecimalinWebApiIActionResultOk()function?【发布时间】:2019-08-0812:21:27【问题描述】:我有一个sqlSeverBDD,它存储一些表,其中包含十进... 查看详情

用逗号格式化数字PHP [重复]

】用逗号格式化数字PHP[重复]【英文标题】:FormattingnumberswithcommasPHP[duplicate]【发布时间】:2015-12-1009:36:59【问题描述】:我如何正确地用逗号格式化数字。示例我希望10000变成10,000我知道我可以使用下面的代码来做到这一点number... 查看详情

我如何确保十进制中有一定数量的数字(尾随零)

】我如何确保十进制中有一定数量的数字(尾随零)【英文标题】:Howcanimakesurethereisacertainamountofnumbersinadecimal(trailingzeros)【发布时间】:2018-01-0600:40:01【问题描述】:在我的网站上,有金额被回显。当我从金额中减去时,它会... 查看详情

使用Javascript格式化逗号和小数位的数字[重复]

】使用Javascript格式化逗号和小数位的数字[重复]【英文标题】:FormattingnumbersforcommasanddecimalplaceswithJavascript[duplicate]【发布时间】:2015-07-1810:45:25【问题描述】:我正在尝试使用javascript创建一个函数,该函数显示所有带两位小数... 查看详情

将尾随零添加到小数位

...:48【问题描述】:我有一个数据框列,其中以“。”存储数字数据(以千计)表示千位分隔符。初始输入文件缺少尾随零,并且需要尾随小数位(最多3个)。整数应该保持不变。请在下面找到数据帧df的sn-p。输入数据ProductQuantit... 查看详情

数字字段项的格式掩码:尾随和“前导”零

】数字字段项的格式掩码:尾随和“前导”零【英文标题】:Formatmaskfornumberfielditems:trailingand\'leading\'zero【发布时间】:2011-10-1110:45:14【问题描述】:我在顶点中显示数字时遇到了一些问题,但只有当我通过代码填写它们时。当... 查看详情

显示小数而没有尾随零的最佳方法

...布时间】:2011-03-0711:39:04【问题描述】:是否有一个显示格式化程序可以在c#中将小数作为这些字符串表示形式输出而不进行任何舍入?//decimal->string20->2020.00->2020.5->20.520.5000->20.520.125-& 查看详情