Oracle SQL我的输入应该是to_char中的格式掩码(:n,' fm000')

时间:2017-01-31 14:48:16

标签: sql oracle oracle11g

如果我的字符串长度超过4位数,那么我的输出显示为#######

为此,查询是:

select to_char(:n,'fm0000') from dual;

fm 之后,应该根据输入绑定变量长度取零个数。

输入:123 输出:0123

INPUT:123456789 输出:0123456789

零点应该在输入数量之前。

任何建议!!

4 个答案:

答案 0 :(得分:2)

编辑 - OP完全改变了要求。

编辑问题的解决方案很简单:

... '0' || to_char(:n)

编辑结束 - 下面的原始答案(最初发布的问题)。

看起来你要做的就是这样做最好。别介意with条款,仅用于测试。根据需要进行调整,并在格式模型中使用足够的9来覆盖最长的输入。

with
     test_data ( n ) as (
       select 3     from dual union all
       select 19923 from dual
     )
select n, to_char(n, 'fm99990000') as n_str
from   test_data
;

     N N_STR
------ --------
     3 0003
 19923 19923

2 rows selected.

答案 1 :(得分:0)

根据documentation

  

如果省略fmt,则n将完全转换为VARCHAR2值   足以保持其有效数字

所以你需要的只是to_char(:n)

答案 2 :(得分:0)

根据您的更新要求,您可以稍微修改@ mathguy的原始格式蒙版操作;或者默认转换为字符串和左边填充,或者甚至更简单地只添加一个零:

with t (n) as (
  select 1 from dual
  union all select 123 from dual
  union all select 123456789 from dual
)
select n,
  to_char(n, 'fm' || rpad('0', length(n) + 1, '0')) as n_str_1,
  lpad(to_char(n), length(n) + 1, '0') as n_str_2,
  '0' || to_char(n) as n_str_3
from t;

         N N_STR_1    N_STR_2    N_STR_3   
---------- ---------- ---------- ----------
         1 01         01         01        
       123 0123       0123       0123      
 123456789 0123456789 0123456789 0123456789

答案 3 :(得分:0)

如果您要检查的字段是字符串:

case when substring(field, 1, 1)!=0 then '0'||field else field end

如果它是一个数字,你总是可以按照其他人的建议加一个 0:

'0'||to_char(field)