Avatar billede dennism Nybegynder
07. februar 2007 - 21:01 Der er 12 kommentarer og
1 løsning

mySQL: tal til dato

Jeg sidder med en database, hvor udvikleren har valgt at gemme datoer som double. Det kan f.eks. være:

20040426.142013

Hvordan kan jeg få denne til at ligne en dato - f.eks. 26/04-2004?
Avatar billede razmuz_dk Nybegynder
07. februar 2007 - 21:42 #1
CONCAT(SUBSTRING(date, 7, 2), '/', SUBSTRING(date, 5, 2), '-', SUBSTRING(date, 1, 4))

Ser ikke superpænt ud.. men det burde i princippet virke :)
Avatar billede kabbak Professor
07. februar 2007 - 21:42 #2
Mn ikke den forstår denne, men det kræver at tallet altid er lige langt.

a = 20040426.142013
Dato = DateSerial(Left(a, 4), Mid(a, 5, 2), Mid(a, 7, 2)) + TimeSerial(Mid(a, 10, 2), Mid(a, 12, 2), Right(a, 2))
Avatar billede dennism Nybegynder
07. februar 2007 - 22:17 #3
razuz_dk >>

Din kode er mySQL-kode, ik?
Avatar billede kjulius Novice
07. februar 2007 - 22:33 #4
Du burde kunne konvertere det til en datetime variabel, hvorefter det kan formateres som en normal dato:

1. Din double variabel konverteres til en int eller bigint:
    CAST(dindate * 1000000 AS BIGINT)
2. Denne værdi konverteres til en karakterstreng:
    CAST(  AS CHAR(10))
3. Nu kan konverteres til en datetime:
    CAST(STR_TODATE(    ,'%Y%m%d%H%i%S') AS DATETIME)

Vi sætter det lige sammen (indefra og ud):
CAST(STR_TODATE(CAST(CAST( dindate * 1000000 AS BIGINT) AS CHAR(10), '%Y%m%d%H%i%S') AS DATETIME)

Vejen er nu vidt åbent for at formatere datoen som du ønsker:

DATE_FORMAT(  , '%d/%m-%Y')

Igen sætter vi lige sammen:
DATE_FORMAT(CAST(STR_TODATE(CAST(CAST( dindate * 1000000 AS BIGINT) AS CHAR(10), '%Y%m%d%H%i%S') AS DATETIME), '%d/%m-%Y')


Jeg har ikke haft mulighed for at teste ovenstående, som alene er baseret på et hurtigt kig i manualen, så jeg gir' selvsagt ingen garanti. :-)
Avatar billede razmuz_dk Nybegynder
07. februar 2007 - 22:34 #5
Jo, min kode er mysql - men den skal sættes ind i en kontekst for ikke at give fejl, hvis det er det du mener.
Avatar billede kjulius Novice
07. februar 2007 - 22:36 #6
Dooh!! CHAR(10) skal selvfølgelig være CHAR(14)!
Avatar billede kjulius Novice
07. februar 2007 - 22:59 #7
--> kabbak: Din kode er vist til Access, er det ikke?
Avatar billede dennism Nybegynder
07. februar 2007 - 23:34 #8
Hvordan vil i foreslå, at jeg gør det i PHP, når tallet ligger i $row['startDate']? Tror det er en bedre løsning, end at gøre det direkte i mySQL.

Beklager spørgsmålet placering.
Avatar billede razmuz_dk Nybegynder
07. februar 2007 - 23:42 #9
$date = $row['startDate'];
$time = mktime(substr($date, 9, 2), substr($date, 11, 2), substr($date, 13, 2), substr($date, 4, 2), substr($date, 6, 2), substr($date, 0, 4));
$new_date = date("%d/%m %Y, %H:%i:%s", $time);

Sådan kunne man gøre - kig evt i php-manualen for substr(), mktime() og date() for at forstå hvorfor jeg gør som jeg gør. Ovenstående er ikke testet, men burde i princippet virke.

Dog vil jeg ikke anbefale ovenstående løsning hvis der bliver tung trafik på dit website eller hvis du er ved at lave et større projekt - det er ikke den optimale løsning.
Avatar billede dennism Nybegynder
08. februar 2007 - 00:08 #10
Tak, rasmus :) Smider du lige et svar?
Avatar billede razmuz_dk Nybegynder
08. februar 2007 - 00:14 #11
Jep :)
Avatar billede dennism Nybegynder
08. februar 2007 - 00:18 #12
Efter at have fjernet % i date-funktionen kørte det :)
Avatar billede razmuz_dk Nybegynder
08. februar 2007 - 00:28 #13
Nåeh ja, jeg blandede lige php og mysql sammen der :-) i MySQL skal du nemlig bruge %

Godt du selv kunne finde ud af det :)
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

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



Seneste spørgsmål Seneste aktivitet
I går 20:46 opkaldside Af hagbartm i Mobiltelefoner
I går 16:05 win 10 vil ikke boote Af bb69 i Windows
I går 11:20 Lenovo x390 Af tobberjas i PC
I går 10:14 Alder i Excel Af Nanarsi i Excel
I går 09:00 Flere linier på faneblad Af Peder Lund Nielsen i Excel