2017-07-15 4 views
0

Genau wie es gibt MIN() und MAX() für Zahlen, gibt es etwas, um die längste und kürzeste Zeichenfolge/Text zu bekommen?Erhalten längste Zeichenfolge mit MYSQL

Ich weiß über length() und char_length() aber es gibt nur die Länge und nicht den Text selbst als Wert zurück.

Abfrage:

SELECT 
    LENGTH(c.name) AS catname, 
    i1.ref, 
    MIN(i1.scost) as mincost, 
    SUM(i1.instock) as totalstock 
FROM 
    inventory i1 
LEFT JOIN app.categories c ON i1.ref = c.ref 
WHERE 
    i1.date = (SELECT 
        MAX(i2.date) 
       FROM 
        inventory i2 
       WHERE 
        i2.ref = i1.ref AND 
        i2.location = i1.location) 
    AND i1.ref LIKE '%GS-5008PL%' 
GROUP BY i1.ref 

Edited hinzufügen: Ich habe sogar versucht COALESCE, aber es funktioniert nicht. Die maximale Länge zu bekommen wäre großartig, aber zumindest nicht null wäre gut.

+1

Sie glauben, Ihr Problem als Beispiel unten vorgesehen ist komplizierter, aber ich sehe nicht, warum. Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry

Antwort

0

verwenden können, wenn Tabelle klein ist:

select your_column str, length(your_column) as len 
from your_table 
where length(your_column) = (select len 
          from (select your_column str, length(your_column) as len 
            from your_table order by length(your_column) desc) 
          where rownum < 2) 
1

bist du meine ist eine, die ein Feld hat am längsten in allen recoreds? wenn ja, Sie

select * from table order by length(yourTextField) desc limit 0,1 
+0

Das ist einfach, aber meiner ist viel komplexer – 3zzy

+1

Vergessen Sie nicht, es wird nicht indiziert werden - so wird die Leistung proportional zur Ergebnismenge sinken. – wally

+0

vielleicht kann ein Feld hinzufügen, um Länge (Feld) aufzuzeichnen, einen Datensatz mit Feldlänge einfügen, können Sie es indizieren.aber das ist keine gute Idee. –

Verwandte Themen