如果我的字符串长度超过4位数,那么我的输出显示为#######
为此,查询是:
select to_char(:n,'fm0000') from dual;
在 fm 之后,应该根据输入绑定变量长度取零个数。
输入:123 输出:0123
INPUT:123456789 输出:0123456789
零点应该在输入数量之前。
任何建议!!
答案 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)
答案 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)