2010-07-29 9 views
9

Est-ce que quelqu'un sait s'il existe un moyen de trouver quelle est la longueur de la plus longue rangée dans une colonne dans Oracle? Fondamentalement, j'ai besoin d'obtenir la longueur de la ligne la plus longue et ensuite utiliser cette longueur plus 1 avec SUBSTR pour rendre la sortie de la colonne un caractère plus long que la chaîne la plus longue.Trouver la longueur de la plus longue rangée dans une colonne dans Oracle

Merci

EDIT:

Merci pour les conseils.

Cependant, l'approche MAX(LENGTH(column_name)) AS MAXLENGTH me donne le nombre que je veux mais quand j'essaie de l'utiliser avec SUBSTR(column_name,1, MAXLENGTH) je reçois une erreur d'identificateur invalide.

SO J'ai fait une fonction pour renvoyer la Numberi a ensuite voulu utiliser:

SUBSTR(column_name,1,maxlengthfunc) 

Cela m'a donné le résultat suivant:

SUBSTR(NAME,1,MAXLENGTHFUNC) 

Plutôt que:

SUBSTR(NAME, 1, 19) 

Et n'a pas réduit la taille de la colonne de sortie comme j'avais besoin.

également

RTRIM(name)||' ' 

n'a rien fait pour moi dans développeur SQL.

Merci.

Répondre

1
select max(length(MyColumn)) as MaxLength 
from MyTable 
3

Cela devrait faire ce que vous voulez:

select max(length(MyColumn)) from MyTable; 

Selon ce que vous essayez d'atteindre, vous pouvez aussi être insterested de savoir que vous pouvez afficher les données dans la colonne, plus exactement un espace comme ceci:

select rtrim(MyColumn)||' ' from MyTable; 
22

Cela fonctionnera avec les colonnes VARCHAR2.

select max(length(your_col)) 
from your_table 
/

Les colonnes CHAR ont évidemment toutes la même longueur. Si la colonne est une CLOB, vous devrez utiliser DBMS_LOB.GETLENGTH(). Si c'est long c'est vraiment difficile.

2

Sélectionnez max (LENGTH (nom_colonne)) de nom_table.

0

Pour rendre le maxlength utilisable que vous pouvez obtenir à partir d'une sélection incrustée

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

w/o Fonction:

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 

avec votre fonction:

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

déclare votre fonction comme determinictic pour de meilleures performances:

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; 
3
SELECT max(length(col_name)+1) as MyOutput 
FROM table_Name 

Sortie normale ressemblerait

MyOutput 
1  5 

sortie New ressemblerait

MyOutput 
1  6 
Questions connexes