Gå til innhold

mySQL - finne det lengste navnet i et felt


Anbefalte innlegg

Videoannonse
Annonse
Hei!

Jeg sliter litt med å finne ut hvordan jeg finner det lengste navnet i et felt, dessuten telle opp hvor mange bokstaver det er. Har søkt lenge nå, men ikke funnet noe som funker :/

Noe slik?

 

[/code]select Navn, len(Navn) from Ansatte where AnsattId = (select AnsattId from Ansatte order by len(Navn) desc limit 1)




			
		
Lenke til kommentar
Takk! Det virket med length.

 

Men har da et annet problem. Hva hvis det f.eks. er to navn som er like lange? Hvordan kommando skal man skrive inn for at det skal oppdages og skrive ut begge? Er det i det hele tatt mulig med bare SQL?

SQL Server har et nøkkelord som heter WITH TIES, men jeg klarer ikke å se at MySQL har noe tilsvarende. Dessverre.

 

Men du kan jo prøve denne:

 

select * from Ansatte where length(Navn) = (select max(length(navn)) from Ansatte) 

 

Problemet med denne er at den sannsynligvis ikke benytter seg av evt. indexer og derfor kan bli veldig treg hvis du har store menger med data.

Lenke til kommentar

Jeg får syntax error på forslaget ditt.

 

mysql> select * from Ansatte where length(Navn) = (select max(length(Navn)) from Ansatte);

ERROR 1064: You have an error in your SQL syntax near 'select max(length(Navn)) from Ansatte)' at line 1

Endret av Crozzfire
Lenke til kommentar

Jeg har dessverre ikke itlgang til noen MySQL servere fra denne maskinen. Teste kun mot en MSSQL server, og det fungerte fint.

 

Du kan prøve om denne fungerer:

select * from Ansatte where length(Navn) = (select length(Navn) from Ansatte order by length(Navn) desc limit 1);

Endret av kaffenils
Lenke til kommentar
et kjedelig alternativ er å først hente ut maxlengde, select max(length(Name)) og deretter select * from tabell where length(Name)=detdufantiste

Jeg foreslo faktisk å bruke max(length(Navn)) i en subquery, men han fikk visst en SQL Syntax Error uten at jeg skjønner hvorfor.

Lenke til kommentar
Nei de heter ikke det. Har en tabell ved navn DEPT og kolonne DNAME. Bare byttet ut fra eksemplene. Ja, har sjekket for skriveleif..

Ser SQL spørringen din slik ut da:

select * from DEPT where length(DNAME) = (select length(DNAME) from DEPT order by length(DNAME) desc limit 1);

Lenke til kommentar

Nysgjerrig som jeg er måtte jeg se om det funka:

mysql> select * from country where length(name) = (select length(name) from country order by length(name) desc limit 1);
ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select length(name) from country order by length(name) desc lim

(Har en tabell country med et felt name) Hvordan var det med støtte for subqueries i mysql? (Jeg har versjon 4.0.24 på debian)

 

Funka etter hensikten i postgres, derimot...

 

M.

edit: rydda layout

Endret av mysjkin
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...