datetime列上的CASE表达式

sto*_*990 0 sql t-sql sql-server

我正在尝试访问日期时间列以查明日期是否在今天之后的一周内,或过期.然后写一个新列的值来说Incoming,Overdue或Fine.

SELECT
CASE next_action_date
WHEN (BETWEEN GETDATE()+7 AND GETDATE()) THEN 'Incoming'
WHEN (< GETDATE()) THEN 'Overdue'
ELSE 'Fine'
END AS condition
FROM
tableName
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所得到的,但正如你可以通过观察看到的那样,它根本不起作用:

Msg 156,Level 15,State 1,Line 3
关键字'BETWEEN'附近的语法不正确.

das*_*ght 5

有两种语法的的CASE表达-即所谓的简单一个,对其它的值的列表进行比较的单个值,并且搜索一个与通用布尔条件.您选择了简单的案例,但它没有足够的灵活性来满足您的需求; 你应该切换到搜索的语法,如下所示:

SELECT
CASE
    WHEN next_action_date BETWEEN GETDATE() AND GETDATE()+7 THEN 'Incoming'
    WHEN next_action_date < GETDATE() THEN 'Overdue'
    ELSE 'Fine'
END AS condition
FROM
tableName
Run Code Online (Sandbox Code Playgroud)