Tag: "zeit"

Der DATETIME Datentyp

Posted on Jul 13, 2004 von in SQL Server

Der DATETIME Datentyp ist 8 Bytes gross. Die ersten vier Bytes speichern die Anzahl der Tage vor oder nach dem 01.01.1900; die letzten vier Bytes speichern die Anzahl der 'Clock Ticks' seit Mitternacht. Die binäre Darstellung jedes der beiden 4-byte Stücke ist tatsächlich die gleiche die auch für Integer Darstellung benutzt wird. Jede Sekunde besteht aus 300 Ticks, die merkwürdigerweise um ein Vielfaches präziser sind als @@TIMETICKS.

Ganze Geschichte »

Konvertierung aus Julianischem Kalender

Posted on Jul 13, 2004 von in SQL Server
DECLARE @yr INT
DECLARE @jd INT
SELECT @yr = 2002, @jd = 245
SELECT DATEADD(yyyy, @yr - 1900, -1) + @jd AS Julian_Date

Julian_Date
------------------------------------------------------
2002-09-02 00:00:00.000

(1 row(s) affected)

Danke an Jonathan Van Houtte.

Sekunden in Minuten umwandeln

Posted on Jul 13, 2004 von in SQL Server
DECLARE @sekunden INT
SET @sekunden = 61
SELECT
CONVERT(VARCHAR(2), FLOOR(@sekunden/60)) +
':' +
RIGHT('0' + CONVERT(VARCHAR(2), (@sekunden%60)), 2)


-----
1:01

(1 row(s) affected)

DATETIME Spalten gruppieren und sortieren

Posted on Jul 13, 2004 von in SQL Server
SELECT
 DATEADD(day, 0 , DATEDIFF(day, 0, MsgDateReceived)) AS "Datum"
 , COUNT(*) AS Anzahl
FROM mails_header
GROUP BY
 DATEADD(day, 0 , DATEDIFF(day, 0, MsgDateReceived))
ORDER BY
 "Datum" DESC 

GETDATE() und Julianisches Datum

Posted on Jul 13, 2004 von in SQL Server
SELECT
 YEAR(GETDATE())*1000
 +
 DATEPART(y,GETDATE()) AS the_date

the_date    
----------- 
2004182

(1 row(s) affected)

Danke an Jonathan van Houtte!

Das Alter einer Person

Posted on Jul 13, 2004 von in SQL Server
DECLARE @d DATETIME
SET @d = '23.07.1968'
SELECT
     DATEDIFF(yyyy,CAST(@d AS DATETIME),GETDATE()) 
     - 
     (CASE WHEN DATEADD(yyyy,DATEDIFF(yyyy,CAST(@d AS DATETIME),GETDATE()),CAST(@d AS DATETIME)) > 
     GETDATE() THEN 1 ELSE 0 END)

            
----------- 
35

(1 row(s) affected)

Datum in das Format JJJJMMDDHHMMSS bringen

Posted on Jul 13, 2004 von in SQL Server

Eigentlich würde man so eine Aufgabe wahrscheinlich besser im Client code verarbeiten, aber wenn's denn unbedingt der Server sein soll, könnte dies folgendermaßen aussehen:

DECLARE @date DATETIME
SET @date = '19.10.2003 09:48:22'

SELECT
CAST(
CONVERT(CHAR(4), YEAR(@date)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, MONTH(@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DAY(@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(hour, @date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(minute,@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(second,@date)), 2))
AS CHAR(14))

/*oder*/
SELECT
SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(CHAR,@date,120),'-',''),' ',''),':',''),1,14)


--------------
20031019094822

(1 row(s) affected)


--------------
20031019094822

(1 row(s) affected)

Nachtrag 20.09.2004: Offentsichtlich geht es auch noch eine Spur einfacher:

DECLARE @date DATETIME
SET @date = '19.10.2003 09:48:22'
SELECT
REPLACE(REPLACE(REPLACE(CONVERT(CHAR,@date,120),'-',''),' ',''),':','')

-------------------
20031019094822

(1 row(s) affected)

Erster und letzter Tag eines Jahres

Posted on Jul 13, 2004 von in SQL Server
DECLARE @dt DATETIME
SET @dt = GETDATE()
SELECT
CAST(CAST(YEAR(@dt) AS CHAR(4))+'0101' AS DATETIME)
AS Jahresanfang
, CAST(CAST(YEAR(@dt) AS CHAR(4))+'-12-31T23:59:59.997' AS DATETIME)
AS Jahresende

Jahresanfang Jahresende
------------------------------------------------------ ------------------------
2004-01-01 00:00:00.000 2004-12-31 23:59:59.997

(1 row(s) affected)

Ganze Geschichte »