T-SQL 子句 where with datepart from field
T-SQL clause where with datepart from field
我需要写这样的东西:
select a, b, c
from table
where dateadd(a, b, c) < getdate()
有:
a=nvarchar: YY, D, ...
b=int
c=date
对于"b"和"c"没有问题,但是datepart不能是字段,只能是静态类型:just YY, YYYY, D, ....
我该如何解决?
实际上问题是另一个,但这个系统似乎更容易解决。
最初的问题是这样的,也许你可以用另一种方式解决它:我有一个 table 的行在称为 X.
的持续时间内保持有效
如果此持续时间 X 以天为单位定义,则会出现闰年问题(例如 365 天不同于 1 年)。如果我以年(例如 1 年)或月表示,datepart 函数可以帮助我:dateadd (YY, 1, dateFrom) 是完美的。
所以我想不用天数表示的字段"validity duration"而是用两个字段,一个是值,一个是类型(月、年、周)。
只有那个日期部分不允许。
自行解决
where
CASE [a]
WHEN 'YY' THEN dateadd(YY,[b],[c])
WHEN 'DD' THEN dateadd(DD,[b],[c])
...
END
不优雅,但很管用。
我需要写这样的东西:
select a, b, c
from table
where dateadd(a, b, c) < getdate()
有:
a=nvarchar: YY, D, ...
b=int
c=date
对于"b"和"c"没有问题,但是datepart不能是字段,只能是静态类型:just YY, YYYY, D, ....
我该如何解决?
实际上问题是另一个,但这个系统似乎更容易解决。
最初的问题是这样的,也许你可以用另一种方式解决它:我有一个 table 的行在称为 X.
的持续时间内保持有效如果此持续时间 X 以天为单位定义,则会出现闰年问题(例如 365 天不同于 1 年)。如果我以年(例如 1 年)或月表示,datepart 函数可以帮助我:dateadd (YY, 1, dateFrom) 是完美的。
所以我想不用天数表示的字段"validity duration"而是用两个字段,一个是值,一个是类型(月、年、周)。
只有那个日期部分不允许。
自行解决
where
CASE [a]
WHEN 'YY' THEN dateadd(YY,[b],[c])
WHEN 'DD' THEN dateadd(DD,[b],[c])
...
END
不优雅,但很管用。