是否可以在SQL Server计算列中使用Case语句

bsi*_*vel 0 t-sql sql-server sql-server-2012

我有一个包含两个日期列的表,都允许空值.

如果FileDate不为null,则AsOfDate需要等于(FileDate - Offset),其中Offset是一个默认为零的整数列.

这是我的表格def:

CREATE TABLE [import].[CMAR_GLXXXX](
[FileDate] [date] NULL,
[LoadDTM] [date] NULL,
[AsOfDate] [date] NULL,
[AccountNumber] [varchar](50) NOT NULL,
[CostCenter] [varchar](50) NOT NULL,
[OffSet] [int] default (0) NOT NULL,
[Value] [decimal](10,2) NOT NULL
 ) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下内容:

(case when [File] IS NULL then NULL else dateadd(day,(-1 * [Offset]),[FileDate]) end)
Run Code Online (Sandbox Code Playgroud)

遗憾的是,计算出的列错误对话框在对表达式进

有任何想法吗?

Sea*_*nge 6

案例表达式在这里完全有效,但不需要您想要的输出.让sql server自然处理NULLS.

dateadd(day,(-1 * x),[d1])
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

这里演示的是表定义.似乎这完全符合您的要求.

create table #Something
(
    x int
    , d1 datetime
    , compCol as dateadd(day, (-1 * x), [d1])
)

insert #Something
select 3, null union all
select 4, '2016-01-01'

select *
from #Something
Run Code Online (Sandbox Code Playgroud)