Avatar billede jademutter Nybegynder
09. oktober 2006 - 10:12 Der er 22 kommentarer

Formatering af dato?

Hej Alle,

Jeg er ved at lave en DB, hvor jeg skal grupperer nogle aktiviteter efter hvor mange der har været pr. måned.

Jeg har en tabel over samtlige aktiviter, hvor dato ser sådan ud "22JUN2006".

Mit output ser således ud "Jun2006", men Access ser bare på det som en tekststreng, og sorteringen går derfor galt.

Hvordan får jeg konverteret det, så jeg kan sortere dem rigtigt?

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 10:15 #1
Du skal have konverteret din dato, så den reelt kan identificeres som datoformat. P.t. er den kun i tekst-format ....

Du kan eventuelt benytte en forespørgsel til at gøre dette :o)
Avatar billede jademutter Nybegynder
09. oktober 2006 - 10:21 #2
Ja det er jeg klar over, men jeg kan ikke få konverteret strengen til en dato, og samtidigt holde formatet "JUN2006" eller "Juni2006"

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 10:24 #3
Den nemmeste løsning vil være, at indsætte et ekstra felt i din database, hvor du benytter en konverteret version af dit datofelt ... din søgning vil blive langt hurtigere når du benytter datoformatet korrekt :o)
Avatar billede jensen363 Forsker
09. oktober 2006 - 10:25 #4
Opret en ekstra kolonne i tabellen, eksempelvis kaldet konverteret, og benyt en opdateringsforespørgsel til at konvertere data med :

UPDATE Tabel
SET Tabel.Konverteret = (Left([Dato],2) & "-" & Mid([Dato],3,3) & "-" & Right([Dato],4));
Avatar billede jademutter Nybegynder
09. oktober 2006 - 10:44 #5
Ja så langt er jeg med, men det giver jo stadig bare "29-JUN-2006", og ikke "Jun2006" eller "Juni 2006"

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 11:04 #6
Det var heller ikke lige det dit spørgsmål gik på :-) ... du skriver "mit output ser således ud .... "

Det er muligheden for korrekt sortering konverteringen tilgodeser :-)

... men du kan efterfølgende benytte dit konverterede datofelt/format til visning af data efter følgende :

  mm.yyyy    = 06.2006
  mmm yyyy  = jun 2006
  mmmm yyyy  = juni 2006
  osv
Avatar billede kabbak Professor
09. oktober 2006 - 11:14 #7
Brug en function, Ret selv månedens navne, hvis de skulle være engelske.

Public Function Maaned(Md As String) As Integer
    Dim FindMaaned, I As Integer
    FindMaaned = Array("JAN", "FEB", "MAR", "APR", "MAJ", "JUN", "JUL", "AUG", "SEP", "OKT", "NOV", "DEC")
    For I = 0 To 11
        If Md = FindMaaned(I) Then
            Maaned = I + 1
            Exit Function
        End If
    Next
End Function


så ser sql sådan ud

UPDATE Tabel
SET Tabel.Konverteret = (Left([Dato],2) & "-" & Maaned( Mid([Dato],3,3)) & "-" & Right([Dato],4));
Avatar billede jademutter Nybegynder
09. oktober 2006 - 11:42 #8
Jensen:
Hvordan bruger jeg den konvertering, hvad skriver jeg og hvor?

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 12:06 #9
Har du oprettet et ekstra felt i din tabel ( format dd-mm-yyyy )
Avatar billede jademutter Nybegynder
09. oktober 2006 - 12:25 #10
Jeg har lavet en query, hvor jeg har lavet det ekstra felt...

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 12:54 #11
Et eksempel :

SELECT Tabel.Dato,
(Left([Dato],2) & "-" & Mid([Dato],3,3) & "-" & Right([Dato],4)) AS Konverteret, Format([Konverteret],"mm/yyyy") AS [Format MM ÅÅÅÅ],
Format([Konverteret],"mmm yyyy") AS [Format MMM ÅÅÅÅ],
Format([Konverteret],"mmmm yyyy") AS [Format MMMM ÅÅÅÅ]
FROM Tabel;
Avatar billede jademutter Nybegynder
09. oktober 2006 - 13:04 #12
hmm.....

Nu har feltet det rigtige format, men sorteringen er stadig galt.
Der bliver sorteret alfabetisk...

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 13:08 #13
SELECT Tabel.Dato,
(Left([Dato],2) & "-" & Mid([Dato],3,3) & "-" & Right([Dato],4)) AS Konverteret,
Format([Konverteret],"mm/yyyy") AS [Format MM ÅÅÅÅ],
Format([Konverteret],"mmm yyyy") AS [Format MMM ÅÅÅÅ],
Format([Konverteret],"mmmm yyyy") AS [Format MMMM ÅÅÅÅ]
FROM Tabel
ORDER BY (Left([Dato],2) & "-" & Mid([Dato],3,3) & "-" & Right([Dato],4));
Avatar billede jademutter Nybegynder
09. oktober 2006 - 13:15 #14
Den er stadig galt med sorteringen...

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 13:16 #15
Hvad sorteres forkert ???
Avatar billede jademutter Nybegynder
09. oktober 2006 - 13:36 #16
Jeg vil jo gerne have datoen (mmmm åååå) sorteret sådan at den soretere som; jan,feb,mar,apr....
men den sortere som; apr,august,december,feb....

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 13:47 #17
Det er jo netop derfor du skal sortere på det konverterede datofelt, ikke på måned/år
Avatar billede jademutter Nybegynder
09. oktober 2006 - 13:53 #18
hvordan fixer jeg så det, når jeg vil have det stående i en rapport, jeg kan jo ikke have begge felter stående i rapporten?

/Jademutter
Avatar billede jensen363 Forsker
09. oktober 2006 - 13:57 #19
Det kan du godt ... du kan skjule det felt du ikke vil se i rapporten
Avatar billede kjulius Novice
09. oktober 2006 - 23:50 #20
Jeg vil da tro, at du kan skrive ca. sådan her i din forespørgsel:

SELECT *
FROM Whatever
ORDER BY Format(Cdate(left(ditfelt,2)+ ' ' + mid(ditfelt,3,3) + right(ditfelt,4)),"yyyymm")

På den måde vil den sortere på 200606 for 22JUN2006 og 082007 for 22AUG2007, hvilket vel er hvad du ønsker?

CDate funktionenen kan godt konvertere "22 JUN 2006" til en dato, men den kan ikke lide dit 22JUN2006, så der skal indføjes et par blanke.

Jeg tror faktisk det også er det jensen363 ville have gjort i 09/10-2006 13:08:51. Han har bare glemt CDate på sin ORDER BY.
Avatar billede kjulius Novice
09. oktober 2006 - 23:53 #21
BTW, hvis det ikke skulle fremgå helt klart: Du behøver naturligvis ikke at bruge Format funktionen, hvis du ønsker at sortere på hele datoen, altså også dagen. Så behøver du kun CDate...
Avatar billede kjulius Novice
07. januar 2007 - 16:48 #22
-->jademutter:
Fik du det ordnet? Ellers har jeg nu kigget lidt på det igen, og min sidste kommentar tog vist ikke helt højde for din kommentar fra 09/10-2006 13:36:50, så en let revideret SQL kunne lyde:

SELECT *
FROM Whatever
ORDER BY Month(CDate(Left(ditfelt, Len(ditfelt)-7) + ' ' + Mid(ditfelt, Len(ditfelt)-6, 3) + Right(ditfelt, 4))), Right(ditfelt, 4)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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

IT-JOB