代码之家  ›  专栏  ›  技术社区  ›  Matt

格式化从SQL UD函数返回的日期时间

  •  1
  • Matt  · 技术社区  · 16 年前

    考虑这个简单的用户定义函数:

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    
    ALTER FUNCTION [dbo].[ufn_GetFirstDayOfMonth] ( @pInputDate    DATETIME )
    RETURNS DATETIME
    BEGIN
    
        RETURN CAST(CAST(YEAR(@pInputDate) AS VARCHAR(4)) + '/' + 
                    CAST(MONTH(@pInputDate) AS VARCHAR(2)) + '/01' AS DATETIME)
    
    END
    

    运行时使用:

    SELECT [Business].[dbo].[ufn_GetFirstDayOfMonth] ('03/13/15')
    

    返回,2015-03-01 00:00:00.000。太棒了,正是我想要的。现在假设我想打开它的头,使用日期格式mdy并执行以下函数:

    set dateformat mdy
    SELECT [Business].[dbo].[ufn_GetFirstDayOfMonth] ('03/13/15')
    

    为什么返回2015-03-01 00:00:00.000(与上述完全相同)?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Michael Pakhantsov    16 年前

    设置日期格式,用于分析日期,不用于显示。

    例子:

    CREATE TABLE #tempTable (DateFormatSample SMALLDATETIME)
    SET DATEFORMAT MDY
    INSERT INTO #tempTable
    VALUES ('09/28/2007')
    SET DATEFORMAT YDM
    INSERT INTO #tempTable
    VALUES ('2007/28/09')
    SET DATEFORMAT YMD
    INSERT INTO #tempTable
    VALUES ('2007/08/28')
    
    
    SELECT DateFormatSample
    FROM #tempTable
    DROP TABLE #tempTable
    

    结果集:

    DateFormatSample
    ———————–
    2007-09-28 00:00:00
    2007-09-28 00:00:00
    2007-08-28 00:00:00
    

    使用转换函数更改日期表示形式。