Найдите длину самого длинного ряда в колонке оракула - PullRequest
14 голосов
/ 29 июля 2010

Кто-нибудь знает, есть ли способ узнать, какова длина самой длинной строки в столбце в Oracle?

В основном мне нужно получить длину самой длинной строки, а затем использовать эту длину плюс 1с SUBSTR, чтобы сделать вывод столбца на один символ длиннее самой длинной строки.

Спасибо

РЕДАКТИРОВАТЬ:

Спасибо за совет.

Однако, подход 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-разработчике.

Спасибо.

Ответы [ 9 ]

29 голосов
/ 29 июля 2010

Это будет работать со столбцами VARCHAR2.

select max(length(your_col))
from your_table
/

Очевидно, столбцы CHAR имеют одинаковую длину.Если столбец является CLOB, вам нужно использовать DBMS_LOB.GETLENGTH ().Если это долго, это действительно сложно.

5 голосов
/ 08 сентября 2011
SELECT max(length(col_name)+1) as MyOutput
FROM table_Name

Нормальный вывод будет выглядеть как

   MyOutput
1     5

Новый вывод будет выглядеть как

   MyOutput
1     6
3 голосов
/ 29 июля 2010

Это должно делать то, что вы хотите:

select max(length(MyColumn)) from MyTable;

В зависимости от того, чего вы пытаетесь достичь, вас также может заинтересовать информация о том, что вы можете вывести данные в столбце плюс ровно один пробел, например:

select rtrim(MyColumn)||' ' from MyTable;
2 голосов
/ 29 июля 2010

выберите максимум (ДЛИНА (имя столбца)) из имени таблицы.

1 голос
/ 29 июля 2010

без функции:

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;
1 голос
/ 29 июля 2010
select max(length(MyColumn)) as MaxLength
from MyTable
0 голосов
/ 31 июля 2018

Для использования максимума в определении столбца, я предлагаю правильный подход:

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;
0 голосов
/ 22 мая 2018

Чтобы добавить все значения в столбце к наибольшему значению +1, вы можете сделать:

SELECT RPAD( column_name ,(SELECT MAX(LENGTH( column_name ))+1 FROM table)) FROM table;
0 голосов
/ 29 июля 2010

Чтобы сделать максимальную длину пригодной для использования, вы можете получить ее из встроенного выбора

select <do something with maxlength here> 
from
(select x.*, 
( select max(length(yourcolumn)) from yourtable) as maxlength 
from yourtable x)
...