PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : date spalte konvertieren von CHAR zu DATE



wotuzu17
22-01-2012, 10:57
Hi,

ich möchte ein schlechtes Datenbankdesign einer MYSQl Tabelle ändern.

In dieser Tabelle werden Tageseinträge gespeichert. Das Datum wird dabei als CHAR(8) im Format YYYMMDD gespeichert. Das halte ich nicht für sinnvoll, daher möchte ich eine Spalte 'date1' einfügen, die das Datum als date- Datentyp speichert. Also die Spalte anlegen ist kein Problem, aber kann ich mit SQL Kommandos diese Spalte automatisch anhand des Inhaltes der date- Spalte füllen, oder muss ich mir ein externes Skript dazu bauen?

Danke für die Unterstützung,

Andreas



--
-- Tabellenstruktur für Tabelle `stockprice`
--

CREATE TABLE IF NOT EXISTS `stockprice` (
`stock_id` int(10) unsigned NOT NULL,
`date` char(8) NOT NULL,
`open` float(12,4) DEFAULT NULL,
`high` float(12,4) DEFAULT NULL,
`low` float(12,4) DEFAULT NULL,
`close` float(12,4) DEFAULT NULL,
`vol` int(10) unsigned DEFAULT NULL,
`oi` int(10) unsigned DEFAULT NULL,
KEY `stock_id` (`stock_id`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `stockprice`
--

INSERT INTO `stockprice` (`stock_id`, `date`, `open`, `high`, `low`, `close`, `vol`, `oi`) VALUES
(1, '19910101', 0.8960, 0.8960, 0.8960, 0.8960, 0, NULL),
(2, '19910101', 0.9830, 0.9830, 0.9830, 0.9830, 0, NULL),
(3, '19910101', 0.4000, 0.4000, 0.4000, 0.4000, 0, NULL);

wotuzu17
22-01-2012, 13:26
hab die Anpassungen mit einem Skript vorgenommen:

- Spalte date in datechar umbenannt
- Neue Spalte date eingefügt (Typ: DATE)
- php Skript ausgeführt:


<?php
$dbhost = 'localhost:3036';
$dbuser = 'va';
$dbpass = 'mypwd';
$dbname = 'mydbb';

$con = mysql_connect($dbhost, $dbuser, $dbpass);

if (!$con)
die('Could not connect: ' . mysql_error());

mysql_select_db($dbname, $con);

$sql = "SELECT DISTINCT `datechar` FROM `stockprice` ORDER BY `datechar`";
$result = mysql_query($sql);

$alldates=array();
while($row = mysql_fetch_array($result)) {
$alldates[]=$row[0];
}

foreach ($alldates as $datechar) {
$sql="UPDATE `stockprice` SET `date` ='".substr($datechar,0,4)."-".substr($datechar,4,2)."-".substr($datechar,6,2)."' WHERE `datechar` = '$datechar'";
echo $sql."\n";
$result = mysql_query($sql);
if (!$result) die('Update Error'. mysql_error());
}

mysql_close($con);
?>