我是一名Java开发人员,但我要求打印给出否。在Oracle中以类似下面的特定模式:
我尝试了下面的方法,但它没有适用于我在上面的输入/输出表中提到的最后一个场景 即
输入: 123456 ,
它提供的输出如下: P12345
SELECT CONCAT('P', LPAD(my_number, 5, '0')) FROM DUAL;
你能指导我哪个功能有用吗?
答案 0 :(得分:1)
试试这个
SELECT CONCAT('P', LPAD(my_number, case when length(my_number) < 6 then 5 else length(my_number) end, '0')) FROM DUAL;
答案 1 :(得分:0)
这是一个灵活的解决方案,涵盖了所有示例,但也包括更长的数字
set serveroutput on;
declare
my_number varchar2(255);
retval varchar2(255);
begin
my_number := '123456';
select case when length(my_number) < 6
then 'P' || LPAD(my_number, 5, '0')
else 'P' || my_number
end
into retval
FROM DUAL;
dbms_output.put_line(retval);
end;
答案 2 :(得分:0)
或者这个。
select concat('P',trim(to_char(1234568,'999909999'))) from dual
union
select concat('P',trim(to_char(1,'999909999'))) from dual
答案 3 :(得分:-1)
可以通过处理显示数字的格式以最短的方式完成。
您可以使用 TO_CHAR 格式化输出。 fm 格式会删除前导空格。
'P'||to_char(column_name, 'fm000000')
例如,
SQL> WITH DATA AS
2 ( SELECT 1 num FROM dual
3 UNION
4 SELECT 12 FROM dual
5 UNION
6 SELECT 123 FROM dual
7 UNION
8 SELECT 1234 FROM dual
9 UNION
10 SELECT 12345 FROM dual
11 UNION
12 SELECT 123456 FROM dual
13 )
14 SELECT num, 'P'||to_char(num, 'fm000000') mynum FROM data;
NUM MYNUM
---------- --------
1 P000001
12 P000012
123 P000123
1234 P001234
12345 P012345
123456 P123456
6 rows selected.
<强>更新强>
上述方法取决于数字的固定位数,即最多6位。这就是OP要求的特定模式。如果有超过6位数的数字,并且如果已知数字的最大长度,则您需要的只是将格式修改为具有尽可能多的零。
例如,银行帐号或唯一标识号等是固定格式。