Avatar billede nemlig Professor
26. maj 2007 - 18:34 Der er 18 kommentarer og
1 løsning

Ændring af date felt fra VARCHAR TIL DATE

Hej.
Jeg er ved at rette og rydde op.
Jeg har et datofelt af typen "VARCHAR".
Her er datoen registreret som 2/3-2007 (2. marts 2007).
Jeg vil gerne have den gemt med typen "DATE" og syntax 2007-03-02.
Men jeg kan jo ikke bare ændre typen, idet indholdet så forsvinder.
Derfor laver jeg en løkke, hvor jeg har oprettet et nyt datofelt, hvor jeg så læser den oprindelige dato (2/3-2007) og gemmer den i det nye felt som 2007-03-02.

Spørgsmål:
Hvordan konverterer jeg i PHP 2/3-2007 til 2007-03-02. Også gerne med foranstående 0 i dato og måned.
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 18:41 #1
Ligner lidt det her: http://zpiff.dk/mysql/fromvarchar
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 18:45 #2
Dine felter for dag, måned, år har så ikke fast bredde, men du kan bruge LOCATE()-funktionen ( http://dev.mysql.com/doc/refman/5.0/en/string-functions.html ) til at finde '/' og '-'
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 18:46 #3
Og forøvrigt er MySql ligeglad med om det er '2007-03-02' eller '2007-3-2' når du sætter ind. Det skal nok komme ud igen med '0'-er foran.
Avatar billede nemlig Professor
26. maj 2007 - 19:15 #4
Tak for kommentarerne:

Jeg kan ikke helt gennemskue, hvordan jeg skal skrive koden.
Vil du hjælpe :-)
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 19:36 #5
Joh, måske, hvis jeg får tid. Men du kan fx prøve
  substring('2/3-2004',1,locate('/','2/3-2004')-1);
  substring('27/3-2004',1,locate('/','27/3-2004')-1);
og se at det giver '2' og '27'. Altså datoen. Du skal selvfølgelig gøre det med et feltnavn. Så i stedet for de faste tal, der står i linket fra før, kan man bruge LOCATE()-funktionen til at pille dem ud.
Avatar billede nemlig Professor
26. maj 2007 - 20:42 #6
OK - jeg prøver om jeg kan hitte ud af det nu.
Avatar billede nemlig Professor
26. maj 2007 - 21:18 #7
Med din hjælp ovenfor kan jeg nu hente datoen, og årstallet henter jeg med:
SUBSTRING(`date`,1,locate('/',`date`)-1)
RIGHT(`date`,4)

Men hvordan henter jeg måneden?
Den ligger altid 6 tegn fra højre (hvis 1 ciffer) eller 7 tegn fra højre (hvis 2 cifre)
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 21:33 #8
Hmm, måske noget i retning af
  SUBSTRING(`date`,locate('/',`date`)+1,locate('-',`date`)-1)
Avatar billede nemlig Professor
26. maj 2007 - 21:41 #9
Det sidste forslag virker ikke.
Jeg tror dette her virker - ellers er jeg med på, hvad det går ud på.

substring(`date`,locate('-',`date`)- ((locate('-',`date`)-locate('/',`date`)))+1,(locate('-',`date`)-locate('/',`date`))-1)

Mange tak for hjælpen. Sender du et svar.
Avatar billede nemlig Professor
26. maj 2007 - 21:48 #10
Hele koden ser sådan her ud. Det kan måske gøres kortere.

CONCAT(RIGHT(`date`,4),'-',LPAD(substring(`date`,locate('-',`date`)- ((locate('-',`date`)-locate('/',`date`)))+1,(locate('-',`date`)-locate('/',`date`))-1),2,'0'),'-',LPAD(substring(`date`,1,locate('/',`date`)-1),2,'0'))
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 21:59 #11
Det er korrekt, substring skal have en længde til sidst.
Nej, det kan nok ikke gøres kortere - men hvad betyder det ;)
Avatar billede nemlig Professor
26. maj 2007 - 22:08 #12
Sender du et svar. Du har været en rigtig god hjælp. :-)
Avatar billede erikjacobsen Ekspert
26. maj 2007 - 22:16 #13
Nej tak, jeg samler slet ikke på point.
Avatar billede erikjacobsen Ekspert
28. maj 2007 - 19:21 #14
Det kan så måske gøres en smule kortere, alligevel: http://zpiff.dk/mysql/fromvarchar
Avatar billede nemlig Professor
28. maj 2007 - 19:31 #15
Tak for forslaget, men linket giver fejl.
Avatar billede erikjacobsen Ekspert
28. maj 2007 - 19:45 #16
Ikke nu
Avatar billede nemlig Professor
28. maj 2007 - 19:59 #17
jo - nu virker det.
Avatar billede nemlig Professor
28. maj 2007 - 20:01 #18
En god forklaring du fandt der. Jeg har lavet mit med foranstående nul (ved godt det ikke er nødvendigt).
Avatar billede nemlig Professor
10. juni 2007 - 16:04 #19
Lukker
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