【问题标题】:Formatting a Datetime returned from a SQL UD Function格式化从 SQL UD 函数返回的日期时间
【发布时间】:2010-07-30 09:35: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(和上面一样)?

【问题讨论】:

    标签: sql sql-server sql-server-2005 datetime


    【解决方案1】:

    SET dateformat 用于解析日期,不用于显示。

    例子:

    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
    

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

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      相关资源
      最近更新 更多