Форматирование Datetime, возвращенного функцией SQL UD - PullRequest
1 голос
/ 30 июля 2010

Рассмотрим эту простую пользовательскую функцию:

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 Ответ

1 голос
/ 30 июля 2010

SET формат даты используется для анализа дат, а не для отображения.

Пример:

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

Resultset:

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

Используйте функцию преобразования для представления даты изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...