2016-09-16 8 views
-1

Может ли кто-то преобразовать эту функцию из SQL Server в PostgreSQL?Преобразование функции из SQL Server в PostgreSQL

Эта функция принимает даты начала и окончания и создает диапазон дат и производит вывод.

CREATE FUNCTION [dbo].[DateRange] 
(  
     @Increment    CHAR(1), 
     @StartDate    DATETIME, 
     @EndDate    DATETIME 
) 
RETURNS 
@SelectedRange TABLE 
(IndividualDate DATETIME) 
AS 
BEGIN 
     ;WITH cteRange (DateRange) AS (
      SELECT @StartDate 
      UNION ALL 
      SELECT 
        CASE 
         WHEN @Increment = 'd' THEN DATEADD(dd, 1, DateRange) 
         WHEN @Increment = 'w' THEN DATEADD(ww, 1, DateRange) 
         WHEN @Increment = 'm' THEN DATEADD(mm, 1, DateRange) 
        END 
      FROM cteRange 
      WHERE DateRange <= 
        CASE 
         WHEN @Increment = 'd' THEN DATEADD(dd, -1, @EndDate) 
         WHEN @Increment = 'w' THEN DATEADD(ww, -1, @EndDate) 
         WHEN @Increment = 'm' THEN DATEADD(mm, -1, @EndDate) 
        END) 

     INSERT INTO @SelectedRange (IndividualDate) 
     SELECT DateRange 
     FROM cteRange 
     OPTION (MAXRECURSION 3660); 
     RETURN 
END 
GO 
+0

Этот сайт для вопросов программирования. Это не служба перевода кода. –

ответ

1

Нет необходимости писать свою собственную функцию, это уже встроено в:

select * 
from generate_series(date '2016-01-01', date '2016-09-01', interval '2' day); 

Подробности в руководстве: https://www.postgresql.org/docs/current/static/functions-srf.html

+0

Большое спасибо a_horse_with_no_name. Эти функции отлично работают! – Demis