考虑这个简单的用户定义函数:
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(与上面完全相同)返回?
答案 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
使用转换功能进行更改日期表示。