Oracle SQL TO_CHAR 可变长度

Posted

技术标签:

【中文标题】Oracle SQL TO_CHAR 可变长度【英文标题】:Oracle SQL TO_CHAR variable length 【发布时间】:2016-07-26 12:12:45 【问题描述】:

我想就 Oracle SQL 中的 TO_CHAR 方法向您寻求帮助。

TO_CHAR(Number_parameter,'9999D99','NLS_NUMERIC_CHARACTERS = ''. ''') vc_num,

Number_Parameter 以十进制数的形式出现,通常值在 10.10 到 1999.99 之间(但不限于它们)我需要创建一个 VARCHAR,其值的最小表示形式最多有 2 个小数点。我的问题是我还没有找到能满足我需求的口罩。

我需要 200.99 作为 '200.99' 但 10.1 作为 '10.1' 而现在我得到 ' 10.1 ' (带有空格,我不想要)也 150 应该转换为 '150' 而不是 '150.00'

你能帮帮我吗?

【问题讨论】:

使用FM 修饰符作为格式掩码 【参考方案1】:

正如@a_horse_with_no_name 所建议的那样,使用FM format modifier 将摆脱前导空格,并且还将删除尾随零。但它并不完全存在:

with t(number_parameter) as (
  select 200.99 from dual
  union all select 10.10 from dual
  union all select 150.00 from dual
)
select to_char(number_parameter,'FM9999D99','NLS_NUMERIC_CHARACTERS = ''. ''') vc_num
from t;

VC_NUM 
--------
200.99  
10.1    
150.   

要摆脱尾随时期,您需要修剪它:

with t(number_parameter) as (
  select 200.99 from dual
  union all select 10.10 from dual
  union all select 150.00 from dual
)
select rtrim(
  to_char(number_parameter,'FM9999D99','NLS_NUMERIC_CHARACTERS = ''. '''),
  '.') vc_num
from t;

VC_NUM 
--------
200.99  
10.1    
150

或者正如您自己发现的那样,the TM text minimum format model 也适用于您的数据:

with t(number_parameter) as (
  select 200.99 from dual
  union all select 10.10 from dual
  union all select 150.00 from dual
)
select to_char(number_parameter,'TM') vc_num
from t;

VC_NUM                                                         
----------------------------------------------------------------
200.99                                                          
10.1                                                            
150                                                             

【讨论】:

以上是关于Oracle SQL TO_CHAR 可变长度的主要内容,如果未能解决你的问题,请参考以下文章

oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?

sql Oracle TO_CHAR函数

Oracle之to_char

oracle sql优化to_date和to_char 的使用

将 Oracle SQL 转换为 OBIEE Evaluate/TO_CHAR 函数

oracle中如何将long型的数据转换为char型