将DATEPART存储在表中

时间:2011-04-20 18:03:56

标签: sql sql-server sql-server-2005

有没有办法可以在表中存储DATEPART参数,以便稍后我可以将它作为变量传递给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做到这一点,但是视图不采用动态sql,我想避免使用动态sql)。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

看起来不太好但可能是这样的

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