【问题标题】:My SQL if statement is not reading the value i pass itMysql if 语句没有读取我传递的值
【发布时间】:2014-03-21 09:20:02
【问题描述】:

您好,我对 SQL 比较陌生,所以这可能是一个基本问题。我正在尝试传递一个变量并使用该变量内容来确定它运行的内容。变量是char(2),它可以有以下可能的值:

接受 = AP

全部 = AL

拒绝 = DE

接受直线经理 = LA

已接受管理员 = AA

这是它应该做的。我应该输入开始日期和结束日期,然后输入两位数代码来决定我选择哪些假期预订。在下面的示例中,我正在寻找具有任何状态(接受或拒绝)的 2 个假期之间的日期范围:

    EXEC spSearchHoliday '2013-04-01','2015-05-24','PE'

这会返回正确的结果!但是,如果我尝试在具有任何其他状态的两个日期之间运行日期搜索,它将继续返回每个日期。在下面的示例中,我只想返回接受的假期:

    EXEC spSearchHoliday '2013-04-01','2015-05-24','AP'

但它仍然返回范围之间的每个状态假期。

下面是存储过程本身,很长的holidays.startdateholidays.EndDate 部分工作正常,只是与状态相关的部分工作不正常。

    AS
BEGIN
    IF @Status = 'AL'
        BEGIN
            SELECT  StartDate,
                    EndDate,
                    Duration,
                    [Status]
            FROM    Holidays
            WHERE   Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @EndDate
                    OR Holidays.Startdate >= @Startdate AND Holidays.Enddate <= @EndDate
                    OR Holidays.Startdate <= @Enddate AND Holidays.Enddate >= @EndDate
                    OR Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @Startdate
        END
    IF @Status <> 'AL'
        BEGIN
            SELECT  StartDate,
                    EndDate,
                    Duration,
                    [Status]
            FROM    Holidays
            WHERE   Holidays.Status = @Status
                    AND Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @EndDate
                    OR Holidays.Startdate >= @Startdate AND Holidays.Enddate <= @EndDate 
                    OR Holidays.Startdate <= @Enddate AND Holidays.Enddate >= @EndDate
                    OR Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @Startdate
        END
END

【问题讨论】:

  • 结合AND和OR时,我个人不想记住哪个优先级更高。我总是使用方括号 ( ) 来明确(对我或维护我的代码的人)什么在什么之前。

标签: sql sql-server select stored-procedures where


【解决方案1】:

也许问题在于第二个查询中的优先级不正确。请尝试在第二个查询中使用以下 WHERE 子句:

WHERE   Holidays.Status = @Status
        AND (Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @EndDate
        OR Holidays.Startdate >= @Startdate AND Holidays.Enddate <= @EndDate 
        OR Holidays.Startdate <= @Enddate AND Holidays.Enddate >= @EndDate
        OR Holidays.Startdate <= @Startdate AND Holidays.Enddate >= @Startdate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多