如何将Oracle中给定的数字格式化为特定模式?

时间:2015-10-29 07:54:34

标签: sql oracle

我是一名Java开发人员,但我要求打印给出否。在Oracle中以类似下面的特定模式:

enter image description here

我尝试了下面的方法,但它没有适用于我在上面的输入/输出表中提到的最后一个场景 即

输入: 123456

它提供的输出如下: P12345

SELECT CONCAT('P', LPAD(my_number, 5, '0')) FROM DUAL;

你能指导我哪个功能有用吗?

4 个答案:

答案 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位数的数字,并且如果已知数字的最大长度,则您需要的只是将格式修改为具有尽可能多的零。

例如,银行帐号或唯一标识号等是固定格式。