Door
Nick Nurmodeluxe
op 14-08-2012 16:38
gewijzigd op 14-08-2012 16:38
2.576 views
Beste mensen,
Ik heb de onderstaande code uitgevoerd om een MSSQL datumformaat als 0x00009BA100000000 te converteren naar een MYSQL formaat zoals 00-00-0000 00:00:00. Maar als ik deze code uitvoer, wordt er geen datum ge-output.
Hoe kan dit?
<?php
mysql_connect ("********","*******", "********");
mysql_select_db ("*****");
$string = "0x00009BA100000000";
$query = mysql_query("SELECT
CAST(
'1900-01-01 00:00:00' +
INTERVAL CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) DAY +
INTERVAL CAST(CONV(substr(HEX(BinaryData),9,8), 16, 10) AS SIGNED)* 10000/3 MICROSECOND
AS DATETIME) AS converted_datetime
FROM
(
SELECT '".$string."' AS BinaryData
) d");
while ($obj = mysql_fetch_object($query)) {
echo $obj->converted_datetime;
}
?>
Je zegt dd-mm-jjjj en '00-00-0000 00:00:00' maar mysql format is jjjj-mm-dd. Ik weet niet of dat goed gaat met je conversie, maar als je het verwacht zoals in je topic titel dan denk ik dat het niet gaat werken.
Probeer dan eens 1-voor-1 de delen van de query en misschien eerst in de command line tool of phpmyadmin. Werkt sneller en je kan per deel zien of het werkt of niet.
SELECT
CAST(
'1900-01-01 00:00:00' +
INTERVAL CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) DAY +
INTERVAL CAST(CONV(substr(HEX(BinaryData),9,8), 16, 10) AS SIGNED)* 10000/3 MICROSECOND
AS DATETIME) AS converted_datetime
FROM
(
SELECT 0x0000987C00000000 AS BinaryData
) d
Dit bovenstaande werkt in phpmyadmin. Dus het zal in de uitvoer moeten zitten denk ik zo, maar waar?
Omdat ik het ook wel grappig vind heb ik het zelf ook even geprobeerd. Het probleem zit in het dag gedeelte. Als je de HEX conversie erop los laat en dan het aantal dagen ophaalt komt daar 813183024 uit. Dat staat gelijk aan (bij benadering) 2227898 jaar. Dat pas helaas niet meer in een datetime.....
Ergens klopt je formule, of je input dus niet.
whoops, moet ik wel de dag deel nemen en niet de tijd. Alleen dan krijg ik 808466754 wat dan weer ongeveer 6000 jaar is. Ook dat is enigzins veel.
Het klopt niet wat je zegt, want het is gelukt. Er komt 2006-11-17 00:00:00 bij 0x0000987C00000000 uit! Hieronder de code;
Ik heb ipv mysql_fetch_object mysql_fetch_array gebruikt, omdat ik dan geen veldnaam hoef te gebruiken!
<?php
mysql_connect ("mysql4.mijnhostingpartner.nl","Cornelishsg", "Beheerhsg1");
mysql_select_db ("Cornelishsghilversum");
$string = "0x00009BA100000000";
$query = mysql_query("SELECT
CAST(
'1900-01-01 00:00:00' +
INTERVAL CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) DAY +
INTERVAL CAST(CONV(substr(HEX(BinaryData),9,8), 16, 10) AS SIGNED)* 10000/3 MICROSECOND
AS DATETIME) AS converted_datetime
FROM
(
SELECT ".$string." AS BinaryData
) d");
while ($obj = mysql_fetch_array($query)) {
echo $obj[0];
}