Avatar billede razmuz_dk Nybegynder
03. marts 2005 - 15:41 Der er 8 kommentarer og
1 løsning

Kan man tvinges mysql til at sortere med en bestemt dato syntax?

Hej Eksperter

Jeg har en tabel der indeholder en liste med en række datoer i formatet: dd.mm.yyyy. Dog er der nogle steder hvor der er undtagelser og der står en lille tekst i stedet for en dato. Derfor har jeg sat den pågældende kolonne til at være en varchar. Dette gør desværre, at jeg ikke kan sortere efter datoerne. Hvis jeg sortere på dato-kolonnen bliver det jo således, da den tror det er et "tekstfelt" (varchar):
01.02.1954
03.01.2004
03.06.1998
10.03.1999
21.02.1986

osv... Det er jo ikke logisk? Kan man ikke "tvinge" MySQL til at sortere som om det var en timestamp-felttype-kolonne? (og helst i formatet dd.mm.yyyy)

Det skal siges, at jeg ikke kan lave feltet om til en "DateTime", da det jo nogle gange skal indeholde tekst.

Håber i forstår :-)

På forhånd tak!
Avatar billede imago-dei Nybegynder
03. marts 2005 - 15:49 #1
Du kan ikke få mysql til at sortere en tekst streng som om det var en dato. Du kan naturligvis sortere i php, asp, c eller hvad dit programmeringssprog nu er. Men ligemeget hvad du gør bliver det en "dyr" løsning (målt i udførselstid).

Hvad er årsagen til at du ikke kan lave kolonnen til datetime?

Den absolut bedste løsning ville være at du lavede kolonnen til en datetime. Så må du før indsættelse konvertere teksstrengen til en datetime.
Avatar billede imago-dei Nybegynder
03. marts 2005 - 15:51 #2
Hvis du nogle gange vil skrive en tilfældig tekst, kan du så ikke oprette en helt ny kolonne til den tekst? Du kan jo aldrig komme til at sortere korrekt hvis der står

01.02.1954
03.01.2004
Preben
10.03.1999
Avatar billede razmuz_dk Nybegynder
03. marts 2005 - 16:15 #3
Okay! :( Jeg kan ikke lave det om til en DateTime fordi der nogle gange simpelthen ikke er en dato i feltet. Kolonnen afspejler "Keywords"-feltet i en lang række pdf-filer. Nogle af mine kunder bruger keyword-feltet til datoer, andre til nøgleord osv. Så derfor ...

Nogen gode idéer (den eneste løsning indtil videre er vel at sortere det i mit php)?
Avatar billede imago-dei Nybegynder
03. marts 2005 - 17:15 #4
Den bedste løsning er som sagt at have to kolonner i db. En i dato format og en i tekst format (varchar).

Du skal så i php sørge for at indsætte i den korrekte kolonne. Hvis du modtager tekst indsætter du i tekstfeltet og undlader at indsætte i dato feltet.

Men du kommer ikke udenom at sortere i php. Enten før du indsætter (som er at foretrække) eller efter du har trukket data ud af databasen.
Avatar billede arne_v Ekspert
03. marts 2005 - 22:06 #5
Hvis du er på nyeste MySQL kan prøve:

... ORDER BY STR_TO_DATE(feltnavn, '%d.%m.%Y')
Avatar billede arne_v Ekspert
03. marts 2005 - 22:10 #6
På ældre MySQL prøv:

... ORDER BY IF(SUBSTRING(feltnavn,3,1)='.' AND SUBSTRING(feltnavn,6,1)='.',
CONCAT(SUBSTRING(feltnavn,7,4),SUBSTRING(feltnavn,4,2),SUBSTRING(feltnavn,1,2)),
'Not a date')
Avatar billede arne_v Ekspert
10. april 2005 - 18:12 #7
razmus ?
Avatar billede razmuz_dk Nybegynder
11. april 2005 - 11:28 #8
Hey igen gutter... jeps det endte med jeg kunne bruges arne-v's svar.. så tak for det.. læg et svar arne :)
Avatar billede arne_v Ekspert
11. april 2005 - 11:51 #9
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester