在SQL

时间:2015-04-28 06:50:20

标签: sql sql-server-2008

我有这个函数用于将UTC转换为CET,EET并且它正常工作与datetime2类型,但是如何使这个函数也使用int,bigint类型,因为我还将[CalendarYear] int字段在我的桌子上?

CREATE FUNCTION [dbo].[udf_ConvertfromUTCtoCET] (@UTCDate AS DATETIME2(7),@TimeZone AS nvarchar(5))
RETURNS DATETIME2(7)
AS
BEGIN

DECLARE @DstStart datetime2(7)
DECLARE @DstEnd datetime2(7)
DECLARE @CetDate datetime2(7)

SELECT @DstStart = DATEADD(hour, 1,DATEADD(day, DATEDIFF(day, 0, '31/Mar' + CAST(YEAR(@UTCDate) AS varchar)) - 
        (DATEDIFF(day, 6, '31/Mar' + CAST(YEAR(@UTCDate) AS varchar)) % 7), 0)),
    @DstEnd = DATEADD(hour, 1,DATEADD(day, DATEDIFF(day, 0, '31/Oct' + CAST(YEAR(@UTCDate) AS varchar)) - 
        (DATEDIFF(day, 6, '31/Oct' + CAST(YEAR(@UTCDate) AS varchar)) % 7), 0))


IF @TimeZone='EET'  
BEGIN  
SELECT @CetDate = CASE WHEN @UTCDate <= @DstEnd AND @UTCDate >= @DstStart
    THEN DATEADD(hour, +3, @UTCDate)
    ELSE DATEADD(hour, +2, @UTCDate) END
END

ELSE IF @TimeZone='CET'  
BEGIN
SELECT @CetDate = CASE WHEN @UTCDate <= @DstEnd AND @UTCDate >= @DstStart
    THEN DATEADD(hour, +2, @UTCDate)
    ELSE DATEADD(hour, +1, @UTCDate) END
END
ELSE IF @TimeZone='PHT'  
BEGIN
SELECT @CetDate = CASE WHEN @UTCDate <= @DstEnd AND @UTCDate >= @DstStart
    THEN DATEADD(hour, +9, @UTCDate)
    ELSE DATEADD(hour, +7, @UTCDate) END
END

RETURN @CetDate
END


select [DateTime] AS UTC,[dbo].[udf_ConvertfromUTCtoCET] ([DateTime],'CET') AS CET,[dbo].[udf_ConvertfromUTCtoCET] ([DateTime],'EET') AS EET from WarehouseMgmt.DimTime

0 个答案:

没有答案