Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL“;及&引用;或;条件查询_Mysql - Fatal编程技术网

MySQL“;及&引用;或;条件查询

MySQL“;及&引用;或;条件查询,mysql,Mysql,我需要一种基于IF条件更改查询条件的方法 SELECT * FROM table WHERE CASE WHEN work_start < work_end THEN @current_time BETWEEN work_start AND work_end ELSE @current_time >= work_start OR @current_time <= work_end END 我将服务可用时间存储在表格中,因此,例如,如果服务从

我需要一种基于
IF
条件更改查询条件的方法

SELECT *
FROM table
WHERE CASE WHEN work_start < work_end
      THEN @current_time BETWEEN work_start AND work_end
      ELSE @current_time >= work_start OR @current_time <= work_end
      END
我将服务可用时间存储在表格中,因此,例如,如果服务从“08”到“16”可用,我将这些值存储为
work\u start
work\u end
。我需要检查服务当前是否可用,并按如下方式查询:

其中$current\u time>work\u start和$current\u type

但如果服务在夜间可用(例如从“22”到“06”),我需要得到如下结果:

$current\u time>work\u start或$current\u type

如您所见,查询之间的唯一区别是“和”/“或”条件

是否有一个优雅的解决方案或一个可以返回结果的变通方法

使用
IF()
CASE
根据情况执行不同的比较

SELECT *
FROM table
WHERE CASE WHEN work_start < work_end
      THEN @current_time BETWEEN work_start AND work_end
      ELSE @current_time >= work_start OR @current_time <= work_end
      END
选择*
从桌子上
当工作开始<工作结束时的情况
然后@current\u工作开始和工作结束之间的时间

ELSE@current\u time>=工作开始或@current\u time您能提供示例数据和预期结果吗?@Jens我将服务可用小时数存储在表格中,因此,例如,如果服务从“08”到“16”可用,我将这些值存储为“工作开始”和“工作结束”。我需要检查该服务当前是否可用,并像这样查询,
$current\u time>work\u start和$current\u type
,但如果该服务在夜间可用(例如从“22”到“06”),我需要得到如下结果:
$current\u time>work\u start或$current\u type
,正如您所看到的,查询之间的唯一区别是“和”/“或”条件。@Jens谢谢,我对mysql并不陌生,但我想不出一个聪明的解决方案。由于关闭了整整一天,我在另一个表中存储了服务不可用的日期时间(另一个故事)。我想不出解决方法。@gagvirus请将这些细节添加到问题中,而不仅仅是评论。