Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 20. Okt 2005, 07: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
  Mit Zitat antworten Zitat