Datum uit MSSQL converteren naar dd-mm-jjjj
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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;
}
?>
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;
}
?>
Gewijzigd op 14/08/2012 16:38:56 door Nick Nurmodeluxe
regel 15 hoort er niet in.
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.
Gewijzigd op 14/08/2012 16:47:23 door Nick Nurmodeluxe
en automatisch 17 dan ook niet;)
http://stackoverflow.com/questions/4946292/how-to-cast-the-hexadecimal-to-varchardatetime
Maar ik heb nog steeds geen oplossing.
Gewijzigd op 14/08/2012 16:56:51 door Nick Nurmodeluxe
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.
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?
Ergens klopt je formule, of je input dus niet.
Gewijzigd op 14/08/2012 17:26:12 door Erwin H
Ik heb ipv mysql_fetch_object mysql_fetch_array gebruikt, omdat ik dan geen veldnaam hoef te gebruiken!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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];
}
?>
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];
}
?>
Een beetje muggezifterij maar dan had je nog beter mysql_fetch_row kunnen gebruiken ;-)
Nick Nurmodeluxe op 14/08/2012 17:26:29:
Het klopt niet wat je zegt, want het is gelukt.
Haha, het klopt wel wat ik zeg :-) En jouw nieuwste code klopt ook. Kan jij zelf ook zien wat je hebt veranderd waardoor het nu wel werkt en eerst niet? En wat ik dus ook verkeerd deed waardoor ik die gigantische waarde kreeg....
Gewijzigd op 14/08/2012 17:44:43 door Erwin H
Haal even je inloggegevens voor de db weg uit je code.
Begrijp ik het goed dat je gegevens in mysql hebt geimporteerd uit een SQL Server export?