问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据。使用select case when if 来做条件查询判断

CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-then-else 语句)。 因此,一旦条件为真,它将停止读取并返回结果。 如果没有条件为真,则返回 ELSE 子句中的值。

如果没有 ELSE 部分并且没有条件为真,则返回 NULL。

case when语法结构

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;

表结构:

MariaDB [test]> desc backup_job_details;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| server_id | int(11) | YES | | NULL | |
| host_name | varchar(20) | YES | | NULL | |
| host_ip | varchar(50) | YES | | NULL | |
| backup_type | char(20) | YES | | NULL | |
| start_time | datetime | YES | | NULL | |
| end_time | datetime | YES | | NULL | |
| backup_process | char(20) | YES | | NULL | |
| backup_size | char(20) | YES | | NULL | |
| backup_dir | varchar(200) | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
9 rows in set (0.002 sec)

数据:

MariaDB [test]> select * from backup_job_details;
+-----------+-----------------+---------------+-------------+---------------------+---------------------+----------------+-------------+-----------------------------------------------------------------------+
| server_id | host_name | host_ip | backup_type | start_time | end_time | backup_process | backup_size | backup_dir |
+-----------+-----------------+---------------+-------------+---------------------+---------------------+----------------+-------------+-----------------------------------------------------------------------+
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-01-29 12:10:01 | 2023-01-29 12:10:04 | success | 21M | /localbackup/backup_mariadb/Inc_HKTESTMYSQLDB03-2023-01-29_12-10.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | full | 2023-01-30 00:20:01 | 2023-01-30 00:20:03 | success | 41M | /localbackup/backup_mariadb/Full_HKTESTMYSQLDB03-2023-01-30_00-20.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-01-30 12:10:01 | 2023-01-30 12:10:04 | success | 21M | /localbackup/backup_mariadb/Inc_HKTESTMYSQLDB03-2023-01-30_12-10.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | full | 2023-01-31 00:20:01 | 2023-01-31 00:20:05 | success | 41M | /localbackup/backup_mariadb/Full_HKTESTMYSQLDB03-2023-01-31_00-20.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-01-31 12:10:01 | 2023-01-31 12:10:04 | success | 21M | /localbackup/backup_mariadb/Inc_HKTESTMYSQLDB03-2023-01-31_12-10.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | full | 2023-02-01 00:20:01 | 2023-02-01 00:20:03 | success | 41M | /localbackup/backup_mariadb/Full_HKTESTMYSQLDB03-2023-02-01_00-20.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-02-01 12:10:01 | 2023-02-01 12:10:04 | success | 21M | /localbackup/backup_mariadb/Inc_HKTESTMYSQLDB03-2023-02-01_12-10.zip |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-02-01 12:10:01 | 2023-02-01 12:10:04 | failed | 0M | |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-02-01 12:10:01 | 2023-02-01 12:10:04 | failed | 0M | |
| 54 | HKTESTMYSQLDB03 | 192.168.163.21 | inc | 2023-02-01 12:10:01 | 2023-02-01 12:10:04 | success | 10M

1.备份表,通过判断备份表中最后一次备份是否成功,或者失败。成功返回success,失败返回failed

select case when backup_process = 'success' then 'success' when backup_process != 'success' then 'failed' end as backup_process from test.backup_job_details order by server_id DESC limit 1;

如果最后一条数据的backup_process 字段数据为success,sql返回结果就是'success'

MariaDB [(none)]> select case when backup_process = 'success' then 'success' when backup_process != 'success' then 'failed' end as backup_process from test.backup_job_details order by server_id DESC limit 1;
+----------------+
| backup_process |
+----------------+
| success |
+----------------+
1 row in set (0.001 sec)

如果最后一条数据的backup_process 字段数据为其它,sql返回结果就是'failed'
MariaDB [(none)]> select case when backup_process = 'success' then 'success' when backup_process != 'success' then 'failed' end as backup_process from test.backup_job_details order by server_id DESC limit 1;
+----------------+
| backup_process |
+----------------+
| failed |
+----------------+
1 row in set (0.001 sec)

2.备份表,查询最后一条备份记录后的一段时间段内,有没有新的备份记录产生,如果没有,返回failed;如果备份记录正常产生,返回success。如果新的备份记录没有在规定时间内被记录,此时备份脚本状态可能有异常。

SELECT (CASE WHEN TIMESTAMPDIFF(HOUR,end_time, now()) > 14 THEN "failed" ELSE "success" END )AS TIME_DIFF FROM test.backup_job_details order by end_time DESC limit 1;
通过判断最后一条记录的备份时间跟now()此时的时间比较,判断下一次的记录有没有在规定的时间产生,以此来判断备份脚本的执行状态
MariaDB [(none)]> SELECT (CASE WHEN TIMESTAMPDIFF(HOUR,end_time, now()) > 14 THEN "failed" ELSE "success" END )AS TIME_DIFF FROM test.backup_job_details order by end_time DESC limit 1;
+-----------+
| TIME_DIFF |
+-----------+
| success |
+-----------+
1 row in set (0.001 sec)

SQL Case条件判断SQL的更多相关文章

  1. SQL利用Case When Then多条件判断SQL 语句

    http://www.cnblogs.com/kevin2013/archive/2010/07/02/1769682.html SQL利用Case When Then多条件判断SQL ,用于sele ...

  2. mybatis if else if 条件判断SQL片段表达式取值和拼接

    前言 最近在开发项目的时候涉及到复杂的动态条件查询,但是mybaits本身不支持if elseif类似的判断但是我们可以间接通过 chose when otherwise 去实现其中choose为一个 ...

  3. shell编程学习笔记(九):Shell中的case条件判断

    除了可以使用if条件判断,还可以使用case 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script08.sh 开始编写scrip ...

  4. Linux shell case条件判断及位置变量

    case语句使用于需要进行多重分支的应用情况 case分支判断结构 语法: case 变量名称 in      value1)          statement          statemen ...

  5. 多重条件判断SQL:用于用户名称,密码,权限的检测和判断

    string sqlstr = "select count(*) from tb_admin where 用户名='"+UserName+"'and 密码='" ...

  6. Shell入门教程:流程控制(4)case 条件判断

    case的语法结构: case 待测项 in 样式串1] 命令区域1 ;; (样式串2) 命令区域2 ;; 样式串3) 命令区域3 ;; *) 命令区域 ;; esac 命令区域,可以是单一指令或多行 ...

  7. SQL case when then end根据某列数据内容在新列显示自定义内容

    ') then '实习' ' ) then '赤脚医生' ' ) then '村卫生员' ' ) then '乡卫生员' ' ) then '镇卫生员' ' ) then '医师' ' ) then ...

  8. PL/SQL -->隐式游标(SQL%FOUND)

    PL/SQL -->隐式游标(SQL%FOUND) 分类: SQL/PLSQL 基础2010-12-22 16:23 4084人阅读 评论(0) 收藏 举报 sqlexceptionoracle ...

  9. 『忘了再学』Shell流程控制 — 33、if条件判断语句(一)

    目录 1.单分支if条件语句 2.双分支if条件语句 (1)示例1 (2)示例2 什么是流程控制? 普通理解:Shell编写的程序是顺序执行的,也就是说第一命令先执行,然后接着执行第二条命令,然后再下 ...

  10. 『忘了再学』Shell流程控制 — 35、多分支case条件语句

    目录 1.case条件语句介绍 2.case语句需要注意的内容 3.练习 示例1 示例2 1.case条件语句介绍 case语句和if-elif-else语句一样都是多分支条件语句,不过和if多分支条 ...

随机推荐

  1. git 进阶篇

    在git使用时,有时需要在公司内部搭建自己的git服务器,用于内部的版本控制. 从远程服务器到本地 先创建服务器端的空git库,将其clone到本地,再将本地的修改push到服务器端 # step1: ...

  2. 设置CMD命令的初始目录

    本文提供两种方式,第一种通过打开桌面上的快捷方式实现,第二种可以通过 CMD 命令直接进入. 快捷方式 "开始 ---> 程序 ---> 附件",右键单击 " ...

  3. Day03.2:Java的基础语法

    Java基础语法 注释 (注释不会被运行,仅仅作为解释或笔记提供给作者帮助回忆) 单行注释格式:// 多行注释格式: /**/ 文档注释格式:/** */ 示例图 标识符 概念:所有的组成部分都需要名 ...

  4. 使用idea创建第一个Mybatis程序及可能遇到的问题

    第一个Mybatis程序 思路:搭建环境->导入Mybatis->编写代码->执行 搭建环境 创建数据库 CREATE DATABASE `mybatis` USE `mybatis ...

  5. C#读写锁ReaderWriteLockSlim的使用

    C#读写锁ReaderWriterLockSlim的使用 using System; using System.Collections.Generic; using System.Linq; usin ...

  6. ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置

    ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置 操作系统:Ubuntu 18.04 虚幻引擎:4.26.2 目录 ROSIn ...

  7. jdk线程池ThreadPoolExecutor优雅停止原理解析(自己动手实现线程池)(二)

    jdk线程池工作原理解析(二) 本篇博客是jdk线程池ThreadPoolExecutor工作原理解析系列博客的第二篇,在第一篇博客中从源码层面分析了ThreadPoolExecutor在RUNNIN ...

  8. PGL图学习之图神经网络GNN模型GCN、GAT[系列六]

    PGL图学习之图神经网络GNN模型GCN.GAT[系列六] 项目链接:一键fork直接跑程序 https://aistudio.baidu.com/aistudio/projectdetail/505 ...

  9. 图解B树及C#实现(1)

    目录 前言 索引原理 局部性(Locality) 数据的局部性 内存存储和磁盘存储 磁盘存储适合的索引结构 B树简介 定义 B树中数据的有序性 用C#定义数据结构 插入数据的过程 分裂:新节点诞生的唯 ...

  10. 【深入浅出SpringCloud原理及实战】「SpringCloud-Alibaba系列」微服务模式搭建系统基础架构实战指南及版本规划踩坑分析

    Spring Cloud Alibaba Nacos Discovery Spring Boot 应用程序在服务注册与发现方面提供和 Nacos 的无缝集成. 通过一些简单的注解,您可以快速来注册一个 ...