我正在尝试安排自动任务,该任务将根据当前月份提取数据。棘手的部分是它需要每个月拉出一个奇怪的日期(例如从01.15到02.17)。我已经尝试了以下但是它说我的BETWEEN声明存在问题。
WHERE
CASE WHEN
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE() ), 0) = '2017-05'
THEN
CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23'
答案 0 :(得分:1)
您尝试将case表达式用作流控件(如if..else),但case是一个表达式,这意味着它返回单个标量值,并且不能像这样使用它。它甚至在case
MSDN page中声明:
CASE表达式不能用于控制Transact-SQL语句,语句块,用户定义函数和存储过程的执行流程。有关流控制方法的列表,请参阅控制流语言(Transact-SQL)。
您需要的是and
和or
:
WHERE
(
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE() ), 0) = '2017-05-01'
AND CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23'
)
OR -- Here comes the part you would use for the `else` part of the case statement.
答案 1 :(得分:0)
您可以使用复合逻辑表达式,而不是像
WHERE DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE() ), 0) = '2017-05-01'
AND
CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23'