30. marts 2005 - 11:29Der er
4 kommentarer og 1 løsning
Extended Stored Procedure : DateTime format
Er der nogen der ved hvordan en datetime kommer til at se ud i en extended stored procedure?
Ifølge dokumentationen får man en 8 byte datetime ud med srv_paraminfo, men der står ikke noget om hvordan denne kan konverteres til noget forståeligt i C++ (fx. en time_t). Jeg har prøvet at kigge lidt i indholdet af hvad jeg får tilbage, og det blev jeg overhovedet ikke klogere af.
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.
Det viste sig, at jeg faktisk havde fat i den lange ende, men blot var ret dårlig til at skrive debug-info ud i min fil :(
Det der kommer ud af MSSql er helt rigtigt antal dage efter 1900, og så en long der fortæller hvad klokken er i 300-dele af et sekund. Hvorfor det lige er 300-dele ved jeg ikke, men det er der sikkert en god grund til. DVS: long tsqlserver[2]; time_t tc = (tsqlserver[0]-70)*24*60*60 + tsqlserver[1]/300;
Grunden til de -70 er, at en time_t (hvis den kommer fra time() ) er sekunder siden 1970, mens SQLServerens er dage siden 1900.
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.