Sql datetime列上的大小写表达式

Sql datetime列上的大小写表达式,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试访问datetime列,以确定该日期是从今天开始的一周内,还是过期。然后写一个新列的值,表示传入、过期或罚款 到目前为止,这是我得到的,但正如您可能通过查看看到的,它根本不起作用: 信息156,第15级,状态1,第3行 关键字“BETWEEN”附近的语法不正确 使用DATEADDDay,7,GETDATE有一个CASE表达式,即所谓的简单表达式,它将单个值与其他值列表进行比较,并将搜索到的值与通用布尔条件进行比较。您选择了简单的案例,但它没有足够的灵活性满足您的需要;您应该切换到搜索的

我正在尝试访问datetime列,以确定该日期是从今天开始的一周内,还是过期。然后写一个新列的值,表示传入、过期或罚款

到目前为止,这是我得到的,但正如您可能通过查看看到的,它根本不起作用:

信息156,第15级,状态1,第3行 关键字“BETWEEN”附近的语法不正确

使用DATEADDDay,7,GETDATE

有一个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
请试一试

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(
    select GETDATE()+6 next_action_date
)x

您应该使用case语句的另一种形式

    SELECT
    CASE 
        WHEN (next_action_date BETWEEN GETDATE()+7 AND GETDATE()) THEN 'Incoming'
        WHEN (next_action_date < GETDATE()) THEN 'Overdue'
        ELSE 'Fine'
    END AS condition
    FROM
    tableName
试试这个-

DECLARE @Date DATETIME
SELECT @Date = GETDATE()

SELECT
    condition = CASE 
        WHEN t.next_action_date BETWEEN @Date AND DATEADD(DAY, 7, @Date) THEN 'Incoming'
        WHEN t.next_action_date < @Date THEN 'Overdue'
        ELSE 'Fine'
    END 
FROM dbo.tableName t

有点变化,但最终还是奏效了。非常感谢。在GETDATE和GETDATE+7之间的next_action_date,然后在proj_actions_next_action_dateDECLARE @Date DATETIME SELECT @Date = GETDATE() SELECT condition = CASE WHEN t.next_action_date BETWEEN @Date AND DATEADD(DAY, 7, @Date) THEN 'Incoming' WHEN t.next_action_date < @Date THEN 'Overdue' ELSE 'Fine' END FROM dbo.tableName t