Avatar billede Slettet bruger
28. september 2006 - 15:29 Der er 24 kommentarer

Konvertere datetime til timestamp?

Hej,

Jeg har en stor tabel hvor feltet <oprettet> er af typen datetime (og indholdet kunne så fx være 2006-02-17 11:38:36 eller i en anden tabel kun 2006-02-17).

Jeg har nu fundet ud af, at jeg vil konvertere det til en timestamp fordi det sparer mig for en masse bøvl. Men hvordan konverterer jeg det?

Tak :)
Avatar billede jaw Nybegynder
28. september 2006 - 15:33 #1
Sådan skulle jeg mene du kunne hente det ud:

SELECT UNIX_TIMESTAMP('datofelt') as timestamp

og udskriver så som f.eks. $row['timestamp']
Avatar billede Slettet bruger
28. september 2006 - 15:34 #2
jeg vil ikke bare ændre det i select - det er hele tabellens struktur jeg vil ændre, uden at data går tabt :)
Avatar billede jaw Nybegynder
28. september 2006 - 15:37 #3
Nøh, men så må man jo være lidt fantasifuld :) Enten udhenter du det og kører en UPDATE eller også kan du måske bikse en update sammen, der kan klare det i ét hug.

(Og beklager jeg pastede lidt PHP, havde ikke lige set det var en anden kategori :S)

Og husk nu at tage en backup!
Avatar billede coderdk Praktikant
28. september 2006 - 15:44 #4
Er det ikke noget i stil med:

ALTER TABLE tabelnavn ADD COLUMN tstamp INT;
UPDATE tabelnavn SET tstamp = UNIX_TIMESTAMP(oprettet);
ALTER TABLE tabelnavn DROP COLUMN oprettet, CHANGE tstamp oprettet INT NOT NULL;
Avatar billede coderdk Praktikant
28. september 2006 - 15:44 #5
Evt. vent med sidste linje til du har verificeret at det er korrekt ;)
Avatar billede coderdk Praktikant
28. september 2006 - 15:45 #6
Er det ikke noget i stil med:

ALTER TABLE tabelnavn ADD COLUMN tstamp INT;
UPDATE tabelnavn SET tstamp = UNIX_TIMESTAMP(oprettet);
ALTER TABLE tabelnavn DROP COLUMN oprettet, CHANGE tstamp oprettet INT NOT NULL;
Avatar billede jaw Nybegynder
28. september 2006 - 15:46 #7
Hvorfor vil du oprette et INT felt til timestampet og ikke et TIMESTAMP-felt? Men ellers virker det snedigt nok :)
Avatar billede coderdk Praktikant
28. september 2006 - 16:01 #8
TIMESTAMP er ikke unixtime jo :)
Avatar billede jaw Nybegynder
28. september 2006 - 16:13 #9
Doh! Sorry, dumme mig...
Avatar billede Slettet bruger
28. september 2006 - 16:14 #10
det virker ikke.

2004-02-18 17:19:42 bliver til 1077121182 :(
Avatar billede sw_red_6 Nybegynder
28. september 2006 - 16:16 #11
hvad skulle det ellers blive til?
Avatar billede jaw Nybegynder
28. september 2006 - 16:17 #12
Det skal det da også?!
Avatar billede Slettet bruger
28. september 2006 - 16:19 #13
måske virker det faktisk men det er så et UNIX_TIMESTAMP men det, jeg gerne vil ha' er, at feltet fremover ikke får sin værdi fra et script, men direkte fra NOW() og jf. http://www.eksperten.dk/spm/733818 så er måden at gøre det på, at definere feltet som timestamp m. standardværdien now(). Så jeg skal have konverteret alle rækker til det, der svarer til mySQL timestamp + now()
Avatar billede Slettet bruger
28. september 2006 - 16:25 #14
og det synes jeg ikke svarer til det, som UNIX_TIMESTAMP returnerer, men måske er jeg galt på den?
Avatar billede sw_red_6 Nybegynder
28. september 2006 - 16:27 #15
det er du muligvis...
Når du henter data ud så skal du have formateret det til en menneskelæselig dato.
prøv at tjekke den her funktion:
http://dk2.php.net/manual/da/function.date.php
Avatar billede jaw Nybegynder
28. september 2006 - 16:28 #16
Du kunne også bare bruge NOW() når du indsætter datoen i din INSERT-query som din struktur er nu - så behøver du intet ændre.
Avatar billede Slettet bruger
28. september 2006 - 16:30 #17
eller dvs. det svarer til


Feltnavn      Datatype      Kollation (Collation)      Attributter      Nulværdi      Standardværdi      Ekstra     
tabelnavn    timestamp          ON UPDATE CURRENT_TIMESTAMP      Nej      CURRENT_TIMESTAMP     

fordi jeg lige har skiftet til mySQL 5.0
Avatar billede Slettet bruger
28. september 2006 - 16:31 #18
skal måske også lige tilføje at det er et ASP site, så php-funktioner hjælper ikke så meget her :)
Avatar billede sw_red_6 Nybegynder
28. september 2006 - 16:35 #19
ahh der har du nok ret... men der findes vidst nok en ASP version af den funktion, eller i hvert fald en funktion der gør noget af det samme.
Avatar billede Slettet bruger
28. september 2006 - 16:39 #20
ok, men stadig ét problem:

UNIX_TIMESTAMP('feltet') giver altså ikke det samme som

INSERT INTO tabel (test) VALUES('test') hvor der så er et felt 'oprettet' som er timestamp og har CURRENT_TIMESTAMP som standardværdi
Avatar billede jaw Nybegynder
28. september 2006 - 17:01 #21
Kan du ikke bare:
INSERT INTO tabel (test, oprettet) VALUES ('test', NOW())
da?
Avatar billede coderdk Praktikant
28. september 2006 - 17:52 #22
Er det så ikke bare:

ALTER TABLE tabelnavn CHANGE oprettet oprettet TIMESTAMP NOT NULL DEFAULT NOW();

?
Avatar billede Slettet bruger
27. august 2007 - 12:10 #23
smid et svar, hvis I vil ha' point :)
Avatar billede coderdk Praktikant
27. august 2007 - 13:01 #24
Ingen til mig
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