Transact SQL Script: AgeinYearsMonthsDays.SQL
questions? mailto:info@itrain.de
Download SQL Script
Dieses Script dient nur Demonstrationszwecken. Verwendung des Scripts erfolgt auf eigene Gefahr.
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'AgeInYearsMonthsDays' AND TYPE = 'TF') DROP FUNCTION dbo.AgeInYearsMonthsDays GO CREATE FUNCTION dbo.AgeInYearsMonthsDays (@Date datetime, @Date2 datetime) RETURNS @age TABLE (years int , months int, days int) AS BEGIN DECLARE @vorzeichen smallint DECLARE @datumalt datetime DECLARE @datumneu datetime -- Prüfen, welches der beiden Daten das "ältere" ist IF @Date > @Date2 BEGIN SET @datumalt = @date2 SET @datumneu = @date SET @vorzeichen = -1 END ELSE BEGIN SET @datumalt = @date SET @datumneu = @date2 SET @vorzeichen = 1 END -- Berechnen von Tagen, Monate und Jahren und Einfügen des Datensatzes in die -- Hilfstabelle INSERT INTO @age SELECT CASE WHEN DAY(@datumalt) <= DAY(@datumneu) THEN (DATEDIFF(MONTH, @datumalt, @datumneu) / 12) * @vorzeichen ELSE ((DATEDIFF(MONTH, @datumalt, @datumneu) - 1 )/ 12) * @vorzeichen END , CASE WHEN DAY(@datumalt) <= DAY(@datumneu) THEN (DATEDIFF(MONTH, @datumalt, @datumneu) % 12) * @vorzeichen ELSE ((DATEDIFF(MONTH, @datumalt, @datumneu) - 1) % 12) * @vorzeichen END, CASE WHEN DAY(@datumalt) <= DAY(@datumneu) Then (DAY(@datumneu) - DAY(@datumalt)) * @vorzeichen ELSE (DATEDIFF(DAY, DATEADD(MONTH, DATEDIFF(MONTH, @datumalt, @datumneu) - 1, @datumalt), @datumneu)) * @vorzeichen END RETURN END GO -- Beispielaufruf: SELECT * FROM dbo.AgeInYearsMonthsDays('20000801', '20020721') /* Ergebnis: years months days ----------- ----------- ----------- 1,00 11,00 20,00 */
|