将DATEPART存储在表中

Den*_*nis 2 sql sql-server sql-server-2005

有没有办法可以在表中存储DATEPART参数,以便稍后我可以将它作为变量传递给DATEADD(...).像这样的东西

CREATE TABLE abc
(
   Freq <some DATEPART type>,
   FromDate DATE,
   NumOfDays INT
)
Run Code Online (Sandbox Code Playgroud)

然后在我看来

CREATE VIEW abc
AS
SELECT DATEADD(Freq, NumOfDays, FromDate)
FROM abc
Run Code Online (Sandbox Code Playgroud)

(是的,我知道我可以从DYNAMIC SQL执行此操作,但是视图不采用动态sql,我想避免使用动态sql).

JNK*_*JNK 7

如果您不想使用动态SQL,请不要.

由于DatePart数量有限,您可以使用如下CASE语句:

SELECT CASE
           WHEN Freq = 'Year' THEN DATEADD(Year, NumOfDays, Fromdate)
           WHEN Freq = 'Day' THEN DATEADD(Day, NumOfDays, FromDate)
           ... END as 'MyField'
FROM Abc
Run Code Online (Sandbox Code Playgroud)