string to date conversion
Welke functie in MySQL gebruik je om een de string
'1-3-2009 0:00:00' om te zetten naar het DATE format:
2009-03-01
?
alvast bedankt
grt I.
Gewijzigd op 01/01/1970 01:00:00 door El Grimbo
De datumfuncties van MySQL zijn bedoeld om met een geldige datum te werken. De vraag is: hoe komt de TS aan die ongeldige datum in zijn database?
inderdaad, de vraag is dus hoe een valide DATE van een sting te maken.
@Jan
via een ODBC export van een slecht opgezette db. Dit lijkt de enige manier om de data te sanatizen.
En ja ik weet bestl hoe dat met PHP te doen maar dat is over het algemeen langzamer dan MySQL toch?
Ter indicatie: het gaat om 8000 records.
Kortom ik ga de stringbewerkingen in MySQL wel eens bekijken
Gewijzigd op 01/01/1970 01:00:00 door El Grimbo
- Zeker weten dat het een DATE moet worden en geen DATETIME?
- Zeker weten dat in het oude foute formaat de uren soms met 1 cijfer gegeven zijn?
De dag en maand bevatten 1 of 2 digits door - gescheiden
Gewijzigd op 01/01/1970 01:00:00 door El Grimbo
doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
foutedatum,
CONCAT(
SUBSTR(foutedatum, 7, 4),
'-',
SUBSTR(foutedatum, 4, 2),
'-',
SUBSTR(foutedatum, 1, 2)
)
AS goededatum
FROM datumfouten
foutedatum,
CONCAT(
SUBSTR(foutedatum, 7, 4),
'-',
SUBSTR(foutedatum, 4, 2),
'-',
SUBSTR(foutedatum, 1, 2)
)
AS goededatum
FROM datumfouten
Je gebruikt dan de SUBSTR functie van MySQL in combinatie met CONCAT om een goeie datumstring in elkaar te puzzelen. Als je test eenmaal de goede uitkomst geeft, maak je er een UPDATE query van.
MySQL heeft ook REGEX mogelijkheden, daar zou ik eens naar gaan kijken.
thx ga ik uitkomen
Ik heb net even in de MySQL handleiding gekeken en REGEX in MySQL schijnt erg traag te zijn. Mocht het om een grote tabel gaan, dan is het waarschijnlijk handiger om hem gewoon uit te lezen en met PHP regexen te werken.
Heel handig ^^
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// CONVERTTIME()
function converttime($string, $format) {
$dtime = new datetime($string);
return $dtime->format($format);
} // END CONVERTTIME()
?>
// CONVERTTIME()
function converttime($string, $format) {
$dtime = new datetime($string);
return $dtime->format($format);
} // END CONVERTTIME()
?>
Gebruik je dus bv zo
Code (php)
1
2
3
4
2
3
4
<?php
$datum = '1-3-2009 0:00:00';
echo converttime($datum, "Y-m-d"); // OUTPUT: 2009-03-01
?>
$datum = '1-3-2009 0:00:00';
echo converttime($datum, "Y-m-d"); // OUTPUT: 2009-03-01
?>