Registriert seit: 6. Apr 2005
10.109 Beiträge
|
Re: SQL/Systemzeit per Stored Procedure auslesen
20. Okt 2005, 08:25
Mit einer kleinen Anpassung bei GetUtcDate wird die Zeitbasis auf den Beginn des Jahres 1900 1970 umgestellt:
SQL-Code:
CREATE PROCEDURE DateTimeToUnix
@unixtime FLOAT OUTPUT
AS
BEGIN
DECLARE @BiasInMinutes INT, @RefDate DATETIME
SELECT @RefDate = CONVERT( DATETIME, ' 19700101')
/* ab MSSQL 2000 gibt es dann GetUtcDate */
EXEC master.dbo.xp_regread ' HKEY_LOCAL_MACHINE',
' SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
' ActiveTimeBias',
@BiasInMinutes OUTPUT
SELECT @unixtime = CONVERT( FLOAT, DATEADD(MINUTE, @BiasInMinutes, GetDate()) - @RefDate)
END
Für die Konvertierung in einen Hex-String muss das hier herhalten:
SQL-Code:
/* ab MSSQL 2000 gibt es 64-bit integers */
CREATE PROCEDURE IntToHex
@ int INT,
@len INT,
@hex VARCHAR(8) OUTPUT AS
BEGIN
DECLARE @i INT, @q INT, @nibble INT
IF @len > 8 SELECT @len = 8
SELECT @hex = ' '
WHILE (@ int > 0) or (len(@hex) < @len)
BEGIN
SELECT @nibble = @ int % 16
SELECT @ int = @ int / 16
SELECT @hex = substring(' 0123456789abcdef', @nibble + 1, 1) + @hex
END
END
Und überprüfen kann man es so:
SQL-Code:
DECLARE @f FLOAT, @sec INT, @frac INT, @hs VARCHAR(8), @hf VARCHAR(2)
EXEC DateTimeToUnix @f OUTPUT
SELECT @sec = FLOOR(@f * 86400)
SELECT @frac = Floor((@f * 86400 - @sec) * 256)
EXEC IntToHex @sec, 8, @hs OUTPUT
EXEC IntToHex @frac, 2, @hf OUTPUT
SELECT @hs + @hf
Grüße vom marabu
|
|
Zitat
|