有没有办法可以在表中存储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)。
答案 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