Sql 带between的Where子句中的大小写

Sql 带between的Where子句中的大小写,sql,sql-server,Sql,Sql Server,我正试图根据case语句更改where子句的条件。问题是它不喜欢by'between'语句。我可以使用其中的一个案例来更改“Where”标准吗?以下是导致问题的原因(关键字“between”附近的语法不正确) 我正在尝试从PMF_FISCALCALENDAR表中获取日期范围内的财政月。问题是一个日期范围可能是无效的数字,在这种情况下,我需要使用第二个日期 关键字“between”附近的语法不正确 ,(select PERIOD = CASE WHEN PERIOD =

我正试图根据case语句更改where子句的条件。问题是它不喜欢by'between'语句。我可以使用其中的一个案例来更改“Where”标准吗?以下是导致问题的原因(关键字“between”附近的语法不正确) 我正在尝试从PMF_FISCALCALENDAR表中获取日期范围内的财政月。问题是一个日期范围可能是无效的数字,在这种情况下,我需要使用第二个日期

关键字“between”附近的语法不正确

,(select PERIOD =
    CASE 
        WHEN PERIOD = '1' THEN
            'Jan'           
        WHEN Period = '2' THEN
            'Feb'
        WHEN PERIOD = '3' THEN
            'Mar'
        WHEN Period = '4' THEN
            'Apr'
        WHEN PERIOD = '5' THEN
            'May'
        WHEN Period = '6' THEN
            'Jun'
        WHEN PERIOD = '7' THEN
            'Jul'
        WHEN Period = '8' THEN
            'Aug'
        WHEN PERIOD = '9' THEN
            'Sep'
        WHEN Period = '10' THEN
            'Oct'
        WHEN PERIOD = '11' THEN
            'Nov'
        WHEN Period = '12' THEN
            'Dec'

    END

FROM PMF_FISCALCALENDAR 
WHERE 
(CASE
    WHEN YEAR(SALESQUOTATIONLINE.KTI_SENTDATE) = 1900  Then
            SALESQUOTATIONLINE.KTI_SENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
        ELSE 
            SALESQUOTATIONTABLE.PMF_QUOTESENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
END)
    ) AS 'Fiscal Month Sent'
我想使用一个或另一个案例结果作为where子句标准。
我正在使用SQL SERVER 2005将语句更改为

WHERE 
    CASE
        WHEN YEAR(SALESQUOTATIONLINE.KTI_SENTDATE) = 1900  Then
                SALESQUOTATIONLINE.KTI_SENTDATE 
            ELSE 
                SALESQUOTATIONTABLE.PMF_QUOTESENTDATE 
    END between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE

将语句更改为

WHERE 
    CASE
        WHEN YEAR(SALESQUOTATIONLINE.KTI_SENTDATE) = 1900  Then
                SALESQUOTATIONLINE.KTI_SENTDATE 
            ELSE 
                SALESQUOTATIONTABLE.PMF_QUOTESENTDATE 
    END between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE

将语句更改为

WHERE 
    CASE
        WHEN YEAR(SALESQUOTATIONLINE.KTI_SENTDATE) = 1900  Then
                SALESQUOTATIONLINE.KTI_SENTDATE 
            ELSE 
                SALESQUOTATIONTABLE.PMF_QUOTESENTDATE 
    END between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE

将语句更改为

WHERE 
    CASE
        WHEN YEAR(SALESQUOTATIONLINE.KTI_SENTDATE) = 1900  Then
                SALESQUOTATIONLINE.KTI_SENTDATE 
            ELSE 
                SALESQUOTATIONTABLE.PMF_QUOTESENTDATE 
    END between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE

请尝试以下方法以获得更好的语法和性能:

SELECT PERIOD = convert(char(3), dateadd(m, PERIOD, -1), 0)
FROM PMF_FISCALCALENDAR 
WHERE 
    SALESQUOTATIONLINE.KTI_SENTDATE < '1901-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE >= '1900-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
or
    (SALESQUOTATIONLINE.KTI_SENTDATE <  '1900-01-01' or
     SALESQUOTATIONLINE.KTI_SENTDATE >= '1901-01-01' or 
     SALESQUOTATIONLINE.KTI_SENTDATE is null) AND
    SALESQUOTATIONTABLE.PMF_QUOTESENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
SELECT PERIOD=convert(字符(3),日期添加(m,句点,-1),0)
来自PMF_Fiscallendar
哪里
SALESQUOTATIONLINE.KTI_SENTDATE<'1901-01-01'和
SALESQUOTATIONLINE.KTI_SENTDATE>=“1900-01-01”和
PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间的SALESQUOTATIONLINE.KTI发送日期
或
(SALESQUOTATIONLINE.KTI_SENTDATE<'1900-01-01'或
SALESQUOTATIONLINE.KTI_SENTDATE>=“1901-01-01”或
SALESQUOTATIONLINE.KTI_SENTDATE为空)和
SALESQUOTATIONTABLE.PMF_QUOTESENTDATE介于PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间

尝试以下方法以获得更好的语法和性能:

SELECT PERIOD = convert(char(3), dateadd(m, PERIOD, -1), 0)
FROM PMF_FISCALCALENDAR 
WHERE 
    SALESQUOTATIONLINE.KTI_SENTDATE < '1901-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE >= '1900-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
or
    (SALESQUOTATIONLINE.KTI_SENTDATE <  '1900-01-01' or
     SALESQUOTATIONLINE.KTI_SENTDATE >= '1901-01-01' or 
     SALESQUOTATIONLINE.KTI_SENTDATE is null) AND
    SALESQUOTATIONTABLE.PMF_QUOTESENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
SELECT PERIOD=convert(字符(3),日期添加(m,句点,-1),0)
来自PMF_Fiscallendar
哪里
SALESQUOTATIONLINE.KTI_SENTDATE<'1901-01-01'和
SALESQUOTATIONLINE.KTI_SENTDATE>=“1900-01-01”和
PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间的SALESQUOTATIONLINE.KTI发送日期
或
(SALESQUOTATIONLINE.KTI_SENTDATE<'1900-01-01'或
SALESQUOTATIONLINE.KTI_SENTDATE>=“1901-01-01”或
SALESQUOTATIONLINE.KTI_SENTDATE为空)和
SALESQUOTATIONTABLE.PMF_QUOTESENTDATE介于PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间

尝试以下方法以获得更好的语法和性能:

SELECT PERIOD = convert(char(3), dateadd(m, PERIOD, -1), 0)
FROM PMF_FISCALCALENDAR 
WHERE 
    SALESQUOTATIONLINE.KTI_SENTDATE < '1901-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE >= '1900-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
or
    (SALESQUOTATIONLINE.KTI_SENTDATE <  '1900-01-01' or
     SALESQUOTATIONLINE.KTI_SENTDATE >= '1901-01-01' or 
     SALESQUOTATIONLINE.KTI_SENTDATE is null) AND
    SALESQUOTATIONTABLE.PMF_QUOTESENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
SELECT PERIOD=convert(字符(3),日期添加(m,句点,-1),0)
来自PMF_Fiscallendar
哪里
SALESQUOTATIONLINE.KTI_SENTDATE<'1901-01-01'和
SALESQUOTATIONLINE.KTI_SENTDATE>=“1900-01-01”和
PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间的SALESQUOTATIONLINE.KTI发送日期
或
(SALESQUOTATIONLINE.KTI_SENTDATE<'1900-01-01'或
SALESQUOTATIONLINE.KTI_SENTDATE>=“1901-01-01”或
SALESQUOTATIONLINE.KTI_SENTDATE为空)和
SALESQUOTATIONTABLE.PMF_QUOTESENTDATE介于PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间

尝试以下方法以获得更好的语法和性能:

SELECT PERIOD = convert(char(3), dateadd(m, PERIOD, -1), 0)
FROM PMF_FISCALCALENDAR 
WHERE 
    SALESQUOTATIONLINE.KTI_SENTDATE < '1901-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE >= '1900-01-01' AND
    SALESQUOTATIONLINE.KTI_SENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
or
    (SALESQUOTATIONLINE.KTI_SENTDATE <  '1900-01-01' or
     SALESQUOTATIONLINE.KTI_SENTDATE >= '1901-01-01' or 
     SALESQUOTATIONLINE.KTI_SENTDATE is null) AND
    SALESQUOTATIONTABLE.PMF_QUOTESENTDATE between PMF_FISCALCALENDAR.STARTDATE and PMF_FISCALCALENDAR.ENDDATE
SELECT PERIOD=convert(字符(3),日期添加(m,句点,-1),0)
来自PMF_Fiscallendar
哪里
SALESQUOTATIONLINE.KTI_SENTDATE<'1901-01-01'和
SALESQUOTATIONLINE.KTI_SENTDATE>=“1900-01-01”和
PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间的SALESQUOTATIONLINE.KTI发送日期
或
(SALESQUOTATIONLINE.KTI_SENTDATE<'1900-01-01'或
SALESQUOTATIONLINE.KTI_SENTDATE>=“1901-01-01”或
SALESQUOTATIONLINE.KTI_SENTDATE为空)和
SALESQUOTATIONTABLE.PMF_QUOTESENTDATE介于PMF_FiscalLendar.STARTDATE和PMF_FiscalLendar.ENDDATE之间

这仍然如同年(SALESQUOTATIONLINE.KTI_SENTDATE)=1900,然后SALESQUOTATIONLINE.KTI_SENTDATE,如果其1900,则返回null。这仍然如同年(SALESQUOTATIONLINE.KTI_SENTDATE)=1900然后SALESQUOTATIONLINE.KTI_SENTDATE如果它的1900返回一个空值这仍然像年份(SALESQUOTATIONLINE.KTI_SENTDATE)=1900然后SALESQUOTATIONLINE.KTI_SENTDATE如果它的1900返回一个空值这仍然像年份(SALESQUOTATIONLINE.KTI_SENTDATE)一样起作用=1900然后SALESQUOTATIONLINE.KTI_SENTDATE如果其值为1900,则返回空值