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

时间:2010-07-30 09:35:16

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

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

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。太棒了,正是我想要的。现在假设我想要改变它并使用dateformat mdy并执行以下函数:

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

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

1 个答案:

答案 0 :(得分: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

使用转换功能进行更改日期表示。