web-dev-qa-db-ja.com

Oracleの列で最も長い行の長さを見つける

Oracleの列の最も長い行の長さを見つける方法があるかどうか誰かが知っていますか?

基本的に、最長の行の長さを取得し、その長さ+ 1をSUBSTRで使用して、列の出力を最長の文字列よりも1文字長くする必要があります。

ありがとう

編集:

アドバイスありがとうございます。

ただし、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開発者では、何もしませんでした。

ありがとう。

17
electricsheep

これはVARCHAR2列で機能します。

select max(length(your_col))
from your_table
/

CHAR列は明らかにすべて同じ長さです。列がCLOBの場合は、DBMS_LOB.GETLENGTH()を使用する必要があります。それが長ければ、それは本当にトリッキーです。

31
APC
SELECT max(length(col_name)+1) as MyOutput
FROM table_Name

通常の出力は次のようになります

   MyOutput
1     5

新しい出力は次のようになります

   MyOutput
1     6
6
sealz

これはあなたが望むことをするはずです:

select max(length(MyColumn)) from MyTable;

達成しようとしていることに応じて、次のように列のデータと1つのスペースにデータを出力できることを知りたいと思うかもしれません。

select rtrim(MyColumn)||' ' from MyTable;
3
Colin Pickard

table_nameからmax(LENGTH(column_name))を選択します。

2
PaulJWilliams
select max(length(MyColumn)) as MaxLength
from MyTable
2
RedFilter

機能なし:

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
ThinkJet

列のすべての値に最長値+1を埋め込むには、次のようにします。

SELECT RPAD( column_name ,(SELECT MAX(LENGTH( column_name ))+1 FROM table)) FROM table;
0
mrrooster

Maxlengthを使用可能にするには、組み込みのselectから取得することができます

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

列定義で最大値を使用するには、適切なアプローチを提案します。

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
AndyDaSilva52