Was tun, wenn man den Tag, den Monat und das Jahr fein säuberlich in Einzelteilen zerlegt hat? Schauen wir uns mal verschiedene Methoden an, daraus ein gültiges Datum herzustellen.
Dieser Beitrag zeigte, wie man mit Integer Operationen die Anzahl der Tage eines Monats ermitteln kann. SQL Server MVP Steve Kass hat den folgenden Trick in den englischen Newsgroups gepostet:
In Ergänzung zu diesem Beitrag kann man auch folgende Alternativen zur Bestimmung des Alters einer Person verwenden:
SET NOCOUNT ON CREATE TABLE #temp_table ( hm VARCHAR(5) ) INSERT #temp_table VALUES('8:30') INSERT #temp_table VALUES('5:01') INSERT #temp_table VALUES('12:59') INSERT #temp_table VALUES('7:20') SET NOCOUNT OFF SELECT CONVERT(VARCHAR, SUM(DATEDIFF(ss, '1900-01-01 00:00', CONVERT(DATETIME, hm)))/3600) + ':' + CONVERT(VARCHAR, (SUM(DATEDIFF(ss, '1900-01-01 00:00', CONVERT(DATETIME, hm)))%3600)/60) FROM #temp_table DROP TABLE #temp_table ------------------------------------------------------------- 33:50 (1 row(s) affected)
DECLARE @time INT
SET @time = 7382
SELECT
@time / 3600 AS Stunden
, (@time / 60)% 60 AS Minuten
, @time % 60 AS Sekunden
Stunden Minuten Sekunden
----------- ----------- -----------
2 3 2
(1 row(s) affected)
SELECT RIGHT(STUFF(CONVERT(CHAR(22),GETDATE(),13),21,4,' '),9) --------- 10:14:40 (1 row(s) affected) --Oder SELECT CONVERT(CHAR(8), GETDATE(), 8) -------- 10:14:40 (1 row(s) affected) --Oder SELECT CONVERT(CHAR(8), GETDATE(), 108) -------- 10:14:40 (1 row(s) affected)
Falls man auch noch die Millisekunden braucht, kann man:
SELECT CONVERT(CHAR(12),GETDATE(),114) ------------ 10:20:16:033 (1 row(s) affected)
ausführen.
USE Northwind GO SELECT n.dow , ISNULL(SUM(o.Freight),0) FROM Orders o RIGHT JOIN (SELECT 1 dow UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7) n ON DATEPART(w,Orderdate) = n.dow GROUP BY n.dow dow ----------- --------------------- 1 13772.8400 2 12858.7800 3 11069.5500 4 12114.7200 5 15126.8000 6 .0000 7 .0000 (7 row(s) affected) Warnung: NULL-Wert wird durch eine Aggregat- oder eine andere SET-Operation gelöscht.
Danke an Jonathan Van Houtte.
Die anderen 4 Byte speichern die Tageszeit, die als Anzahl der Millisekunden seit Mitternacht dargestellt wird.
Dies kann man in der Januar 2004 Edition von BOL nachlesen.