Хранение DATEPART в таблице - PullRequest
       0

Хранение DATEPART в таблице

2 голосов
/ 20 апреля 2011

Есть ли способ сохранить параметр DATEPART в TABLE, чтобы я мог передать его в качестве переменной в DATEADD (...) позже. Как то так

CREATE TABLE abc
(
   Freq <some DATEPART type>,
   FromDate DATE,
   NumOfDays INT
)

а потом на мой взгляд

CREATE VIEW abc
AS
SELECT DATEADD(Freq, NumOfDays, FromDate)
FROM abc

(да, я знаю, что могу сделать это из DYNAMIC SQL, но Views не принимает динамический sql, и я хотел бы избежать использования динамического sql).

Ответы [ 2 ]

7 голосов
/ 20 апреля 2011

Если вы не хотите использовать динамический SQL, нет.

Поскольку число DateParts ограничено, вы можете использовать оператор CASE, например:

SELECT CASE
           WHEN Freq = 'Year' THEN DATEADD(Year, NumOfDays, Fromdate)
           WHEN Freq = 'Day' THEN DATEADD(Day, NumOfDays, FromDate)
           ... END as 'MyField'
FROM Abc
1 голос
/ 20 апреля 2011

Не очень хорошо выглядит, но может выглядеть так

SELECT 
    Case Freq
        WHEN 'yyyy' THEN DATEADD(yyyy, NumOfDays, FromDate)
        WHEN 'yy' THEN DATEADD(yy, NumOfDays, FromDate)
        WHEN 'mm' THEN DATEADD(mm, NumOfDays, FromDate)
        ...
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...