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