sql - Oracle SQL TO_CHAR 可变长度

标签 sql oracle formatting to-char

我想向您寻求有关 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'

你能帮我吗?

最佳答案

正如@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                                                             

关于sql - Oracle SQL TO_CHAR 可变长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38589592/

相关文章:

mysql - 如何修复插入许多重复行的 INSERT INTO ... SELECT 代码?

sql - 奇怪的ORA-06502 : PL/SQL: numeric or value error

python - 使用 python 将数据复制并粘贴到 Excel 中(保留源格式)

SQL Server 2008 存储过程 - 优化器认为我的参数可以为空

mysql - 根据字段值添加唯一约束

c# - 存储过程,日期时间

java - oracle sql 替换 "in"进行高级查询

excel - 根据格式更改单元格的值

java - 以天、时、分、秒显示期间

mysql - 替换值中的列引用