PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Character einer spalte zählen



CheGuevara
13-06-2005, 21:28
Ich habe ein Problem und zwar suche ich nach einer SQL-Query die mir aus einer tabellenspalte die Anzahl der character des längsten Eintrages ausgibt.

Hat jemand da eine Idee?

CheGuevara

mwanaheri
14-06-2005, 11:31
Du kannst die Länge des Eintrags (macht nur bei varchar Sinn) mit der Funktion character_length() ermitteln:
select character_length(spalte) as laenge, spalte from tabelle group by spalte;

Das Maximum daraus ist dann einfach zu ermitteln (ich kriegs gerade nur mit Unterabfrage hin):

select max(laenge) from
(select character_length(spalte) as laenge
from tabelle
group by spalte
) tmp;

sticky bit
14-06-2005, 14:57
Der Inner-Query ist viel zu umständlich, SELECT MAX(CHARACTER_LENGTH(spalte)) FROM tabelle; reicht vollkommen.

Man sollte noch dazu sagen, dass CHARACTER_LENGTH() nur bei PostgreSQL so heisst (oder tut es bei MySQL auch? @mwanaheri), bei Oracle wäre es LENGTH() und bei Microsoft SQL Server LEN(). Wenn Du keines der 3 (4) benutzt guck in die Doku deines DBMS wie es da heisst, wenn es denn sowas gibt.

Macht übrigens bei CHAR Feldern schon bedingt Sinn nur muss man dann halt ein RTRIM(LTRIM()) oder ggf. nur RTRIM() drumherum machen, sollen Balnks als nicht vorhanden gelten...

mwanaheri
14-06-2005, 15:57
Stimmt, das funktioniert so. Ich hatte befürchtet, dass das Ermitteln der Länge jedes elements zu lange dauert, wenn viele gleiche Elemente drin sind. Tatsächlich aber ist der Aufwand für den Sub-Select weiterhin höher, auch bei vielen gleichen Elementen.

Zu character_length:
Es ist ein reserviertes Wort in SQL2003 und, wie ich gerade sehe, wird es auch in "SQL für Dummies" verwendet. Die nehmen als Beispiel sonst immer MS-Access. Sollte also nicht soo spezifisch PostgreSQL sein. Ob es aber z.B. bei MySQL so heißt, weiß ich nicht. Das habe ich nicht installiert.

CheGuevara
15-06-2005, 19:46
Sorry, das ich erst jetzt schreibe. Hat gefunzt. Super danke!

Gruss
CheGuevara