Создание функции для разбиения дат на год, месяц, дату в отдельный столбец в SQL - PullRequest
0 голосов
/ 10 сентября 2018

Попытка создать функцию разделения даты в формате «2018-05-21» на 2018 |05 |21 |как три отдельных столбца.Попытка создания функции, как показано ниже, но выдает ошибку «месяц», «день».Ошибка говорит: «неверный синтаксис около месяца». Ожидается «(» или «Выбрать».

CREATE FUNCTION [dbo].[functionname]
(
    -- Add the parameters for the function here
    @DateFormat AS DATETIME
)
RETURNS VARCHAR (MAX)
AS
    BEGIN
        RETURN  DATEPART(YEAR,@DateFormat),
                DATEPART(Month,@DateFormat),
                DATEPART(Day,@DateFormat)

    END
GO

1 Ответ

0 голосов
/ 10 сентября 2018

Проблема с вашим текущим SQL в том, что скаляр возвращает только одно значение. Вам нужно использовать функцию табличного значения, чтобы получить несколько столбцов.

Это версия TVF, которая будет содержать три столбца

CREATE FUNCTION [dbo].[FunctionName]
(
    @DateFormat AS DATETIME
)
RETURNS TABLE AS RETURN
(
    SELECT DATEPART(YEAR,@DateFormat) AS [Year],
       DATEPART(Month,@DateFormat) AS [Month],
       DATEPART(Day,@DateFormat) AS [Day]
)

Пример использования:

DECLARE @dates TABLE (SomeDate DATE)
INSERT INTO @dates SELECT '01/25/2018'
INSERT INTO @dates SELECT '10/01/2008'

SELECT d.*,fn.* FROM @dates d
CROSS APPLY [dbo].[FunctionName](d.SomeDate) fn

И немного документации .

Тем не менее, мне лично не нравится эта реализация. Я бы просто ожидал, что операторы DATEPART в части SELECT SQL. Я думаю, что TVF делает его более сложным и не дает ощутимых преимуществ.

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