Avatar billede hcthorsen Praktikant
19. november 2009 - 15:43 Der er 5 kommentarer og
1 løsning

Ændre dato-felt

Da jeg lavede min database i sin tid oprettede jeg de fleste felter med datatypen varchar(50). Det fortryder jeg jo lidt nu, da jeg eksempelvis gerne ville kunne hive mine data ud efter dato. Derfor kunne jeg godt tænke mig at ændre mit dato-felt til datatypen date. I den forbindelse har jeg to spørgsmål:

1) Mine datoer er gemt i formatet dd-mm-yyyy. Hvis jeg nu ændrer datatypen til date bliver mine data så slettet?

2) Er der nogen der har en stump kode liggende der ændrer formattet fra dd-mm-yyyy til yyyy-mm-dd?
Avatar billede michael_stim Ekspert
19. november 2009 - 15:57 #1
Tror ikke du kan skifte datatype uden at tømme kolonnen først.
Avatar billede hcthorsen Praktikant
19. november 2009 - 19:15 #2
Du har ret, alle data slettes hvis man skifter til datatypen date. Har du en løsning på spørgsmål 2?
Avatar billede michael_stim Ekspert
19. november 2009 - 20:15 #3
Men i 1, gør du bare som sådan, at du opretter en ny kolonne og flytter alt data over i den. Derefter kan du tømme kolonnen for data, så kan du ændre datatypen og flytte data tilbage.
20. november 2009 - 08:48 #4
hcthorsen, man kan i hvert fald goere det ved hjaelp af php.  Jeg har for min egen traening (som du maaske kan faa gavn af) leget med det her til morgen.

(michael_stim, da jeg startede her til morgen var kun din kommentar #1 synlig.  Efter et par refreshs kom #3, og nu er igen kun #1 synlig.  Det er en illustration af de problemer jeg (og maaske andre) for tiden er ude i.)

For at convertere fra dd-mm-yyyy til yyyy-mm-dd lavede jeg denne funktion:

function convertDate($dmy)
{
  return substr($dmy,6, 4) . substr($dmy, 2, 4) . substr($dmy, 0, 2);
}

Og saa lavede jeg en mysql tabel der ser saaledes ud:

      navn  dato  date 
      navn1 13-04-1944
      navn2 14-12-2044
      navn3 16-05-1954
      navn4 02-04-2004
      navn5 30-04-1944

Som forberedelse til konverteringen gik jeg saa ind i mysql og indsatte en ny kolonne, ALTER TABLE hcthorsen ADD COLUMN date DATE.

Videre lavede jeg en hjemmeside, http://christianjorgensen.be/hcthorsen.php (koden nedenfor) som gaar ind og henter de gamle dato vaerdier, konverterer dem, og indsaetter de konverterede vaerdier i date kolonnen.  Resultatet var dette:

      navn  dato  date 
      navn1 13-04-1944 1944-04-13
      navn2 14-12-2044 2044-12-14
      navn3 16-05-1954 1954-05-16
      navn4 02-04-2004 2004-04-02
      navn5 30-04-1944 1944-04-30

Efterfoelgende skal man saa naturligvis gaa ind i mysql og droppe dato kolonnen.

Her er saa koden til hjemmesiden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title></title>
<?
function convertDate($dmy)
{
  return substr($dmy,6, 4) . substr($dmy, 2, 4) . substr($dmy, 0, 2);
}
?>
</head>
<body>
<?
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_erorr());
mysql_select_db('christianjoygen') or die(mysql_error());

$result = mysql_query("SELECT navn, dato FROM hcthorsen") or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  $navn = $row['navn'];
  $date = convertDate($row['dato']);
  mysql_query("UPDATE hcthorsen SET date = '$date' WHERE navn = '$navn'") or die(mysql_error());
}
mysql_close($link);
?>
</body>
</html>
Avatar billede hcthorsen Praktikant
20. november 2009 - 12:34 #5
Det var lige det jeg ledte efter, Christian_Belgien. Takker mange gange Sender du et svar? Er det ikke lidt frisk at ligge koden til sin DB på nettet?
20. november 2009 - 13:10 #6
Her er et svar.

Den DB/hjemmeside jeg quoter er oevelses-DB og hjemmeside jeg ikke bruger til andet end at proeve ting ud.
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