Conditional in MYSQL where clause(MYSQL where 子句中的条件)
问题描述
我有一个查询,如果名为 OrderBy 的标志为 1,那么它是一个日历事件,我需要检查两个日期时间字段之间的范围.而所有其他类型我们只检查您正在查看的日期.我研究了 if 语句,并看到许多建议使用案例的帖子,因此我尝试将其实现到我的查询中.我的查询需要 where 的条件.我知道我有语法问题,这就是为什么我在这里希望有人能指出正确的方法.
I have a query that if a flag called OrderBy is 1 then it is a calendar event and I need to check for a range between two date time fields. Whereas all other types we just check for the day you are viewing. I research if statements and saw many posts where it was suggested a case be used so I tried to implement it into my query. My query needs the condition in the where. I know I have syntax issues and that is why I am here in the hopes that someone could point out the correct way to do this.
感谢您的宝贵时间
我的查询目前
SELECT activities.*,
activitytypes.orderby
FROM activities
LEFT OUTER JOIN activitytypes
ON activities.typeid = activitytypes.typeid
WHERE activities.userid = 86
AND activities.typeid NOT IN ( 5,
10,
11,
12,
19 )
AND
CASE
WHEN activities.orderby = 1 THEN activities.starttime >= '2013-08-26 04:00:00'
AND activities.endtime <= '2013-08-27 04:00:00'
ELSE activities.activitydate = '2013-08-26'
order BY activitytypes.orderby,
activities.starttime
推荐答案
只要使用足够的括号,您就可以使用 AND
和 OR
来做到这一点.
You can do this with AND
and OR
as long as you use sufficient parentheses.
我还假设 activities.OrderBy
可以为空.如果不是这种情况,您可以删除空检查:
Also I'm assuming that activities.OrderBy
can be null. If that's not the case you can remove the null check:
SELECT activities.*,
activitytypes.orderby
FROM activities
LEFT OUTER JOIN activitytypes
ON activities.typeid = activitytypes.typeid
WHERE activities.userid = 86
AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 )
AND ( ( activities.orderby = 1
AND activities.starttime >= '2013-08-26 04:00:00'
AND activities.endtime <= '2013-08-27 04:00:00' )
OR ( ( activities.orderby IS NULL
OR activities.orderby != 1 )
AND activities.activitydate = '2013-08-26' ) )
ORDER BY activitytypes.orderby,
activities.starttime
或者,如果您仍想使用 CASE
,您只需使用 END
关闭您的 CASE
语句,如下所示:
Alternatively, if you still want to use CASE
, you just need to close your CASE
statement using END
, like this:
SELECT activities.*,
activitytypes.orderby
FROM activities
LEFT OUTER JOIN activitytypes
ON activities.typeid = activitytypes.typeid
WHERE activities.userid = 86
AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 )
AND (
CASE
WHEN activities.orderby = 1 THEN
activities.starttime >= '2013-08-26 04:00:00' AND activities.endtime <= '2013-08-27 04:00:00'
ELSE
activities.activitydate = '2013-08-26'
END
)
ORDER BY activitytypes.orderby,
activities.starttime
这篇关于MYSQL where 子句中的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MYSQL where 子句中的条件
基础教程推荐
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01