如何在SQL中使用IF else条件?

How to use IF else condition in SQL.?

提问人:Stay cool 提问时间:4/24/2023 最后编辑:GMBStay cool 更新时间:4/24/2023 访问量:68

问:

我从用户那里有两个遗嘱参数(非强制性),比如start_date和end_日期。 情况 1 :如果用户没有给出 bothe 值,query 会获取值 案例 2:用户给出开始时间段,然后查询大于或等于开始日期的提取值 案例 3:用户同时提供两者,然后在记录之间查询 fetch 案例4:用户只给出结束日期,然后查询需要获取小于或等于结束日期的值

我的查询

select Reg_date,employees,years from employee 
Where 
IF start_date != ""
  IF end_date != ""
     Where Reg_date >= start_date and Reg_date <= end_date
  Else
     Where Reg_date >= start_date
  END
ELSE
 IF end_date != ""
   Where Reg_date <= End_date
 End
END

你能请任何人吗,我使用的语法是正确的。.我需要在服务器中执行此操作。所以我无法参加任何test_env。用户可以给予start_date和end_date价值...

SQL Oracle IF-语 WHERE-子句

评论

1赞 erik258 4/24/2023
是MySQL还是Oracle?
0赞 OldProgrammer 4/24/2023
Oracle 和 MySQL 是两个不同的平台。我还建议阅读基本的 SQL 教程
0赞 Stay cool 4/24/2023
@OldProgrammer - 它是神谕
0赞 Barmar 4/24/2023
Oracle 不允许在字符串文本两边使用双引号,您必须使用单引号。
0赞 Stay cool 4/24/2023
有没有其他语法/选择方法是 corect .?

答:

4赞 GMB 4/24/2023 #1

该语句是一种流控制结构,在过程代码中起作用,而不是在查询中起作用。IF

在这里,您通常会在查询的子句中使用布尔逻辑。where

where (:start_date is null or reg_date >= :start_date)
  and (:end_date   is null or reg_date <= :end_date  )

...其中,并表示查询的参数。:start_date:end_date

我不确定是否在您的伪代码中使用空字符串来表示“缺少”参数;人们可能会期望值(字符串和日期是两种不同的数据类型)。null

评论

0赞 Barmar 4/24/2023
问题中的查询使用 ,而不是 。它可能来自一个 Web 表单,它没有发送方式,但您可以将字段留空。""NULLNULL
3赞 Littlefoot 4/24/2023
...这在 Oracle 中无效,@Barmar。但是,两个连续的引号表示一个空字符串,但是 - 同样在 Oracle 中 - 它等效于 NULL。正如人们评论的那样,这取决于 OP 真正使用哪个数据库。如果是 Oracle,那么 GMB 就把它做好了。
0赞 Stay cool 4/24/2023
我给“ ”,以防用户不给值...此时参数为空