【问题标题】:BETWEEN in SQL Throwing errorSQL 中的 BETWEEN 引发错误
【发布时间】:2014-07-12 06:40:46
【问题描述】:

我正在尝试执行以下查询:

Declare @Range varchar(20) = '2'
SELECT mydate from  tbl_details
where 
CASE WHEN @Range = '1' THEN mydate between convert(Datetime, '12/07/2013') and convert(Datetime, '12/07/2014')
ELSE
DATEDIFF(DD, CONVERT(Datetime, mydate), GETDATE()) <= 
DATEDIFF(dd, GETDATE(), (GETDATE()+ CONVERT(Integer, @Range))) END

但它正在抛出错误

Incorrect syntax near the keyword 'between'

如果我单独提出查询,它们可以正常工作,如下所示:

Declare @Range varchar(20) = '2'
    SELECT mydate from  tbl_details
    where DATEDIFF(DD, CONVERT(Datetime, mydate), GETDATE()) <= 
    DATEDIFF(dd, GETDATE(), (GETDATE()+ CONVERT(Integer, @Range))) 

Declare @Range varchar(20) = '2'
    SELECT mydate from  tbl_details
    where 
    mydate between convert(Datetime, '12/07/2013') and convert(Datetime, '12/07/2014')

【问题讨论】:

  • 乔的回答已经足够了,所以我不会把它作为答案发布,但基本上你错的是大小写语法(就像错误所说的那样)。案例的工作方式如下:案例何时(条件)然后(结果)否则(其他结果)结束。你把条件放在应该是结果的地方。

标签: sql-server tsql datetime case between


【解决方案1】:

该语法在 SQL 中不起作用。调整它的一种方法是将范围分成OR 的两侧:

where 
    (
        @Range = '1'
        and
        mydate between convert(Datetime, '12/07/2013') and convert(Datetime, '12/07/2014')
    )
    or
    (
        @Range <> '1'
        and
        DATEDIFF(DD, CONVERT(Datetime, mydate), GETDATE()) 
        <= 
        DATEDIFF(dd, GETDATE(), (GETDATE()+ CONVERT(Integer, @Range)))
    )

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 2012-12-29
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多