21

有谁知道是否有办法找到 Oracle 列中最长行的长度?

基本上我需要获取最长行的长度,然后使用该长度加上 1SUBSTR来使列的输出比最长的字符串长一个字符。

谢谢

编辑:

感谢您的建议。

但是,该MAX(LENGTH(column_name)) AS MAXLENGTH方法为我提供了我想要的数字,但是当我尝试使用它时,SUBSTR(column_name,1, MAXLENGTH)我得到一个无效的标识符错误。

所以我做了一个函数来返回我想要然后使用的数字:

SUBSTR(column_name,1,maxlengthfunc)

这给了我以下输出:

SUBSTR(NAME,1,MAXLENGTHFUNC)

而不是:

SUBSTR(NAME, 1, 19)

它并没有像我需要的那样缩小输出列的大小。

RTRIM(name)||' '

在 SQL 开发人员中没有为我做任何事情。

谢谢。

4

9 回答 9

35

这将适用于 VARCHAR2 列。

select max(length(your_col))
from your_table
/

CHAR 列显然都是相同的长度。如果列是 CLOB,则需要使用 DBMS_LOB.GETLENGTH()。如果它很长,那真的很棘手。

于 2010-07-29T11:06:15.727 回答
8
SELECT max(length(col_name)+1) as MyOutput
FROM table_Name

正常输出看起来像

   MyOutput
1     5

新输出看起来像

   MyOutput
1     6
于 2011-09-08T19:24:08.107 回答
3

这应该做你想要的:

select max(length(MyColumn)) from MyTable;

根据您要实现的目标,您可能还想知道您可以输出列中的数据加上一个空格,如下所示:

select rtrim(MyColumn)||' ' from MyTable;
于 2010-07-29T11:05:58.423 回答
3

从 table_name 中选择 max(LENGTH(column_name))。

于 2010-07-29T11:07:08.300 回答
2
select max(length(MyColumn)) as MaxLength
from MyTable
于 2010-07-29T11:05:53.603 回答
1

无功能:

select 
  rpad(tbl.column_name, length_info.max_length+1, ' ') as target_string
from 
  table_name tbl,
  (
    select max(length(column_name)) max_length 
    from my_table
  ) 
    length_info

使用您的功能:

select 
  rpad(tbl.column_name, MaxLengthFunc + 1, ' ') as target_string
from 
  my_table tbl

声明你的函数以determinictic获得更好的性能:

create or replace function MaxLengthFunc 
return number  
deterministic
as
  vMaxLen number;
begin

  select max(length(column_name)) 
  into vMaxLen
  from table_name;

  return vMaxLen;

end;
于 2010-07-29T15:08:46.583 回答
0

要使 maxlength 可用,您可能希望从嵌入式选择中获取它

select <do something with maxlength here> 
from
(select x.*, 
( select max(length(yourcolumn)) from yourtable) as maxlength 
from yourtable x)
于 2010-07-29T11:14:48.807 回答
0

为了在列定义中使用最大值,我建议正确的方法:

create or replace FUNCTION F_GET_MAX_LENGTH_TAB_COLUMN
(
  pCOLUMN_NAME  IN VARCHAR2 
, pTABLE_NAME   IN VARCHAR2 
, pOWNER        IN VARCHAR2 
) RETURN NUMBER AS 
  vLength NUMBER;
BEGIN

  BEGIN
    SELECT  DATA_LENGTH 
    INTO    vLength
    FROM ALL_TAB_COLUMNS 
    WHERE 
        COLUMN_NAME = pCOLUMN_NAME 
    AND TABLE_NAME  = pTABLE_NAME 
    AND OWNER       = pOWNER
    ;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      vLength := 0;
  END;

  RETURN vLength;
END F_GET_MAX_LENGTH_TAB_COLUMN;

只需调用函数:

SELECT F_GET_MAX_LENGTH_TAB_COLUMN(
    pCOLUMN_NAME => 'AGN_ST_NOME', 
    pTABLE_NAME  => 'GLO_AGENTES', 
    pOWNER => 'MGGLO' ) 
FROM DUAL;
于 2018-07-31T01:18:37.050 回答
0

要将列中的所有值填充到最长值 +1,您可以执行以下操作:

SELECT RPAD( column_name ,(SELECT MAX(LENGTH( column_name ))+1 FROM table)) FROM table;
于 2018-05-22T12:48:35.717 回答