J'ai une table contenant les colonnes comme
Prefix | CR
----------------------------------------
g | ;#WR_1;#WR_2;#WR_3;#WR_4;#
v | ;#WR_3;#WR_4;#
j | WR_2
m | WR_1
d | ;#WR_3;#WR_4;#
f9 | WR_3
Je veux récupérer des données de CR colonne O WH il a la plus longue chaîne de texte, c'est-à-dire qu'il est dans la table actuelle ; # WR_1; # WR_2; # WR_3; # WR_4; #. j'utilise
SELECT max(len(CR)) AS Max_Length_String FROM table1
Mais ça retombe
Max_Length_String
----------------------------------------
26
Mais ce dont j'ai besoin n'est pas la longueur (26), je voulais comme ça
Max_Length_String
----------------------------------------
;#WR_1;#WR_2;#WR_3;#WR_4;#
Le moyen le plus simple est:
select top 1 CR
from table t
order by len(CR) desc
Notez que cela ne renverra qu'une valeur s'il y en a plusieurs avec la même plus grande longueur.
Vous pouvez:
SELECT CR
FROM table1
WHERE len(CR) = (SELECT max(len(CR)) FROM table1)
Venant juste de recevoir un vote positif plus d’un an après avoir posté ceci, je voudrais ajouter quelques informations.
DISTINCT
à ma requête (SELECT DISTINCT CR FROM ...
), afin d’obtenir chaque valeur une seule fois. Ce serait serait une opération de tri, mais seulement sur les quelques enregistrements déjà trouvés. Encore une fois, pas de problème.LEN
sur les chaînes n'est généralement pas ce qui ralentit ces requêtes.Vous pouvez l'obtenir comme ceci:
SELECT TOP 1 CR
FROM tbl
ORDER BY len(CR) DESC
mais je suis sûr qu'il existe un moyen plus élégant de le faire
Pour Oracle 11g:
SELECT COL1
FROM TABLE1
WHERE length(COL1) = (SELECT max(length(COL1)) FROM TABLE1);
C'était le premier résultat de la recherche Google sur "la plus longue chaîne dans postgres", je vais donc mettre ma réponse ici pour ceux qui recherchent une solution postgres.
SELECT max(char_length(column)) AS Max_Length_String FROM table
postgres docs: http://www.postgresql.org/docs/9.2/static/functions-string.html
Au lieu de SELECT max (len (CR)), AS Max_Length_String FROM table1
Utilisation
SELECT (CR) FROM table1
WHERE len (CR) = (SELECT max (len (CR)) FROM table1)
Avec deux requêtes, vous pouvez y parvenir. Ceci est pour mysql
//will select shortest length coulmn and display its length.
// only 1 row will be selected, because we limit it by 1
SELECT column, length(column) FROM table order by length(column) asc limit 1;
//will select shortest length coulmn and display its length.
SELECT CITY, length(city) FROM STATION order by length(city) desc limit 1;
Pour Postgres:
SELECT column
FROM table
WHERE char_length(column) = (SELECT max(char_length(column)) FROM table )
Cela vous donnera la chaîne elle-même, modifiée pour postgres de @Thorsten Kettner answer
Pour répondre à votre question et obtenir le Prefix
également, MySQL vous permet d'effectuer les tâches suivantes:
select Prefix, CR, length(CR) from table1 order by length(CR) DESC limit 1;
et il reviendra
+-------+----------------------------+--------------------+
| Prefix| CR | length(CR) |
+-------+----------------------------+--------------------+
| g | ;#WR_1;#WR_2;#WR_3;#WR_4;# | 26 |
+-------+----------------------------+--------------------+
1 row in set (0.01 sec)