Avatar billede snoezel Nybegynder
30. september 2005 - 10:36 Der er 23 kommentarer og
1 løsning

replace/update timestamp/date

Hej.

Jeg har et dato felt i databasen med værdi lige nu som Unix Timestamp, hvordan ændrer jeg det til alm date.

Kan jeg køre noget i den stil fra phpmyadmin:
Update table replace user_reg VALUES=date('m/d-Y H:i:s', 1016023608);"

Feltet er int(20)så det burde ikke give prøblemer
Avatar billede barklund Nybegynder
30. september 2005 - 10:57 #1
Har du selv fundet på din query? For det ligner ikke rigtig nogen form for SQL - det er sådan en god blanding af alle mulige forskellige sql-queries...

UPDATE laves som:

UPDATE user_reg SET date_column = 1016023608 WHERE id = 123

Så opdaterer du date_column for brugeren med id=123 til det timestamp, som du angiver.

Er det noget i den stil, som du gerne vil?

--
Morten Barklund
Avatar billede snoezel Nybegynder
30. september 2005 - 11:13 #2
ja jeg har selv lavet den, men den er blot til eksempel på hvordan jeg gerne vil have det :-)

Jeg har lige nu ca 3000 datoer i user_regdate feltet som et timestamp, og disse værdier vil jeg have konverteret til en "rigtig" dato, så jeg er ude efter en måde at hente timestamp på, og ændre værdien til eks. sep 21, 2003

Regnede med at jeg måske kunne bruge denne på en måde, men alle forslag er velkomne:
date('m/d-Y H:i:s', 1016023608); (denne funktion giver det output jeg gerne vil opdatere databasens værdier til)
Avatar billede erikjacobsen Ekspert
30. september 2005 - 11:15 #3
Du skal først tilføje et nyt felt af typen DATETIME:

  ALTER TABLE `yourtable` ADD `newdate` DATETIME

Og så kan du konvertere dine timestamps med:

  UPDATE `yourtable` SET newdate=from_unixtime(`ts`)

(hvis dit felt hedder ts)
Avatar billede barklund Nybegynder
30. september 2005 - 11:19 #4
Du kan ikke bruge en php-funktion i mysql - af logiske årsager. Men som erikjacobsen lidt bedre havde forstået, så er du ude i at lave et nyt felt at typen DATETIME og overføre værdierne hertil.
Avatar billede snoezel Nybegynder
30. september 2005 - 11:40 #5
nej jeg vil endelig ikke lave et nyt felt, så virker cms ikke mere vil jeg tro :-)
jeg vil blot ændre værdien i feltet det er i nu
Avatar billede snoezel Nybegynder
30. september 2005 - 11:42 #6
jeg har overført nogle brugere fra et CMS der brugte timestamp som oprettelsesdato, til et andet som bruger INT(20) med standard værdi 21. sep, 2005 eksempelvis, så nu står de gamle brugere i CMS som om dere oprettelses dato er: 1016023608 og ikke 21. sep. 2003 - de nye der tilmelder sig er ok
Avatar billede snoezel Nybegynder
30. september 2005 - 11:44 #7
Man kan sige at jeg gerne vil have de overførte Timestamp værdier, konverteret i samme felt til DATE...og denne date skal være den værdi Timestamp har

Altså hent timestamp værdi, konverter til dato, updater database med denne konverteret værdi
Avatar billede barklund Nybegynder
30. september 2005 - 11:45 #8
Altså, du skal ændre værdien for _samtlige_ felter? Til timestamp'et 1016023608?

Så er det bare:

UPDATE user_reg SET date_column = 1016023608

Og ikke andet... :)

--
Morten Barklund
Avatar billede erikjacobsen Ekspert
30. september 2005 - 11:45 #9
Du kan ikke putte "21. sep, 2005" i en INT(20) felt
Avatar billede barklund Nybegynder
30. september 2005 - 11:49 #10
Du kan _ikke_ gemme almindelige datoer i et INT-felt - af gode årsager :) INT-feltet kan du bruge til at gemme unix-timestamps og så konverterer dem til et passende tal, når du hiver dem ud.

Med mindre du altså vil gemme tallet 20050930120000 (for klokken 12 frokost idag) i et INT-felt - men så er vi ude i noget nær det grimmeste database-design, jeg kan forestille mig :/

--
Morten Barklund
Avatar billede snoezel Nybegynder
30. september 2005 - 11:54 #11
ericjacobsen--> Min fejl, feltet er: varchar(20)
Avatar billede snoezel Nybegynder
30. september 2005 - 11:54 #12
det var timestamp fra det gamle CMS der var INT, sorry :-)
Avatar billede snoezel Nybegynder
30. september 2005 - 11:56 #13
jeg har timestamp værdien lige nu i USER_REGDATE varchar(20) dette felt skal have værdien ændret til DATE udfra timestamp værdien
Avatar billede erikjacobsen Ekspert
30. september 2005 - 11:56 #14
Du vil altså i tabellen have stående "21. sep. 2003" - og ikke en DATETIME eller DATE ?
Min anbefaling er at opbevare i det format, der bedst lader sig repræsentere i tabellen, i dette tilfælde DATE, og så bestemme andetsteds hvordan det skal vises for brugerne. Så hvis du skal have hjælp til det, så skal jeg gerne - ellers smutter jeg.
Avatar billede snoezel Nybegynder
30. september 2005 - 11:57 #15
erikjacobsen--> Det er måske noget der skal foregå fra en PHP side, eller er der mulighed for det direkte via phpmyadmin?
Avatar billede barklund Nybegynder
30. september 2005 - 11:57 #16
Hm, det er faktisk om muligt en endnu grimmere løsning end den, som jeg mistænkte ovenover.
Avatar billede snoezel Nybegynder
30. september 2005 - 11:59 #17
ericjocobsen--> det er jo ikke fordi jeg påstår det er det bedst programmerede cms system jeg har brugt, men jeg kan ikke ændre databasen, da hele sitet så dør :-(
Det er PHPNUKE der har lavet det, så jeg er NØD til at beholde varchar(20) feltet til DATE() værdien..kan/vil du hjælpe?
Avatar billede snoezel Nybegynder
30. september 2005 - 12:00 #18
barklund, hvordan kan 3000 programmører lave sådan en fejl?
Avatar billede barklund Nybegynder
30. september 2005 - 12:07 #19
Fordi det er 3000 amatører! Spørg enhver, der ved bare det mindste om databasedesign, om det er en fornuftig strategi - og de vil løbe skrigende bort! Jeg forsøger ikke at sætte mig selv op på nogen piedestal som den eneste med sandheden - men ovenstående _er_ tåbeligt!
Avatar billede barklund Nybegynder
30. september 2005 - 12:09 #20
Men hvis du insisterer (og hvis din mysql bruger dansk locale) så er det:

UPDATE table SET user_regdate = '21. sep. 2003'

Det opdaterer dog samtlige rækker.

--
Morten Barklund
Avatar billede snoezel Nybegynder
30. september 2005 - 12:23 #21
barklund- det er netop problemet, at det opdaterer alle felter med samme dato, jeg skulle gerne have den rigtige værdi opdateret, det er her det bliver svært, og derfor jeg spørger her på EKSPERTEN :-)

Jeg tror gerne de er amatører, men jeg er bare ikke selv dygtig nog til at ændre det radikalt, og må derfor bruge deres måder :(
Avatar billede snoezel Nybegynder
30. september 2005 - 12:32 #22
ericjacobsen--> måske jeg misforstod hvad du skrev, det er ok med mig at putte DATE værdi i mit varchar(20)felt , det behøver ikke være "21. sep, 2005".
Det er blot vigtigt at jeg får den rigtige værdi konverteret fra den værdi der er nu som Timestamp
Avatar billede snoezel Nybegynder
30. september 2005 - 12:34 #23
Det der bare ikke ser fedt ud nu, er at der står: Bruger oprettet den, 1016023608
Når han eksempelvis er oprettet den 21. september 2004 :-)
Avatar billede snoezel Nybegynder
30. september 2005 - 20:23 #24
.
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