LPAD是具有该列的MAX LENGTH的列

时间:2012-01-12 11:35:18

标签: sql oracle

我有一列不同长度的数字,我想用零填充它们,这样它们就像最大的数字一样长。像这样:

SQL> SELECT LPAD(PROD_ID, 5, 0) AS PROD_ID  
  2  FROM PRODUCTS_TBL;  

PROD_  
----- 
11235  
00119  
00013  
00015  
00222  
00301  
00302  
00303  
00006  
00087  
00009  
00090  

但是我不想使用数字5,我想在PROD_ID上使用一个函数,以防它稍后更改。我试过了

SQL> SELECT LPAD(PROD_ID, MAX(LENGTH(PROD_ID)), 0)
  2  FROM PRODUCTS_TBL;

SELECT LPAD(PROD_ID, MAX(LENGTH(PROD_ID)), 0)
        *
ERROR at line 1:
ORA-00937: not a single-group group function

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

我自己无法测试,但如果你尝试

会怎样
SELECT LPAD(PROD_ID,
            MAX(LENGTH(PROD_ID)) OVER (),
            0)
FROM   PRODUCTS_TBL;  

答案 1 :(得分:0)

可能最好分两步完成。在一个查询中首先选择最大长度,然后运行选择实际数据的第二个查询。可以通过连接来实现,但它可能表现不佳。