今天做项目写的一个sql:

SELECT(SELECTIF (NOW() < cs.start_date,'has_not_started',IF (NOW() > cs.end_date,'end',IF (NOW() > cs.start_dateAND NOW() < cs.end_date,'processing',0))) AS contract_status) AS contract_status,cs.number,cc.`name`,cs.way,cs.start_date,cs.end_date,cs.`status`,cs.bind_start_date,cs.bind_end_date,cs.bind_status,cs.signed_date,cs.signed_power,cs.last_signed_power,cs.document_id,cs.guarantee,cs.party_a,cs.party_b,(SELECTu.fullnameFROMUSER uWHEREcs.user_id = u.idORDER BYu.id) AS used_contact_name,(SELECTu.mobileFROMUSER uWHEREcs.user_id = u.idORDER BYu.id) AS used_contact_mobile,cs.max_load,(SELECTu.fullnameFROMUSER uWHEREcc.user_id = u.idAND u.enabled = 1AND u.type = 1AND u.`status` = 1ORDER BYu.id) AS user_name,cs.confirmor,cs.confirm_time,cs.bangder,cs.binding_time
FROMcontract_sale cs
LEFT JOIN customer_companies cc ON cs.company_id = cc.companies_id
AND cs.customer_id = cc.customer_id
WHEREcs.company_id = 12
AND (SELECTu.fullnameFROMUSER uWHEREcc.user_id = u.idAND u.enabled = 1AND u.type = 1AND u.`status` = 1ORDER BYu.id
) LIKE '%高%'
ORDER BYcs.id DESC
LIMIT 0,2

难在哪呢?

看看表结构:

表中没有contract_status这个字段,需要根据合同开始时间(start_time)和合同开始时间(end_time)来设置:

1. 当现在时间小于开始时间,合同未开始设置contract_status为has_not_started

2.当现在时间大于结束时间,合同已经结束设置contract_status为over

3.当现在时间大于开始时间小于结束时间,合同进行中设置contract_status为processing

具体实现:

MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:

IF表达式

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

SELECT IF(sva=1,"男","女") AS s FROM table_name
WHERE sva != '';

如果是两重IF判断的时候:

IF(expr1,expr2,IF(expr1,expr2,expr3))

如果是三重时候可以:

IF(expr1,expr2,IF(expr1,expr2,IF(expr1,expr2,expr3)))

(SELECTIF (NOW() < cs.start_date,'has_not_started',IF (NOW() > cs.end_date,'end',IF (NOW() > cs.start_dateAND NOW() < cs.end_date,'processing',0))) AS contract_status) AS contract_status,

总结:sql中的if语句支持多重嵌套

mysql中复杂sql语句之多重if嵌套语句相关推荐

  1. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  2. MySQL中的SQL Mode及其作用

    点击上方"蓝字" 关注我们,享更多干货! 与其它数据库不同,MySQL可以运行在不同的SQL Mode下.SQL Mode定义MySQL应该支持什么样的SQL语法,以及它应该执行什 ...

  3. 【MySQL 中 动态sql,游标_】

    MySQL 中   动态sql,游标_SQLServer MySQL的技术博客_51CTO博客

  4. mysql中常用的三种插入数据的语句

    mysql中常用的三种插入数据的语句: insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错: replace into表示插入替换数据,需求表中有Prim ...

  5. mysql中的sql

    变量 用户变量: 在用户变量前加@ 系统变量: 在系统变量前加@@ 运算符 算术运算符有: +(加), -(减), * (乘), / (除) 和% (求模) 五中运算 位运算符有: & (位于 ...

  6. 如何在MySQL中执行SQL?

    前言 Mysql是免费的,其他⼏个⽬前暂时收费的,Mysql在互联⽹公司使⽤率也是排名第⼀,资料也⾮常完善,社区也⾮常活跃,所以我们主要学习Mysql.一键获取Mysql笔记文档 Mysql笔记文档5 ...

  7. mysql常见慢sql,MySQL中慢SQL的查询及原因分析

    准备数据 查看系统变量 SHOW VARIABLES LIKE 'slow_query%'; slow_query_log:慢sql日志开启状态 slow_query_log_file:慢sql日志存 ...

  8. Mysql中慢SQL的分析与优化

    为何对慢SQL进行治理 从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短.假设总资源是100,有一条慢SQL占用了30的资源共计1分钟.那么在这1分钟 ...

  9. php 嵌套 mysql_php – 在MySQL中实现SQL INTERSECT时嵌套过高

    我最后的作品之一是基于Yii的硬件目录.每个项目都可以与很多组链接. CREATE TABLE item_group ( id INT(10) UNSIGNED NOT NULL AUTO_INCRE ...

最新文章

  1. matlab中如何区分两幅图的亮度_高中历史教学中利用老地图设计习题的尝试
  2. 【深度学习入门到精通系列】Mean Iou
  3. Access和Access VBA学习总结
  4. python定义字典列表_[Python基础]五、列表、元组和字典
  5. java中的jsonjar_java中使用json之相关jar包介绍
  6. SAP CRM WebClient UI CL_BSP_MESSAGES
  7. Java基础之PDF文件的合并
  8. 记住影响客户购买的3个决策关键
  9. 抛物型方程向前差分matlab,(整理)微分方程数值解(学生复习题).
  10. 踩着七彩祥云来接你的人不一定是意中人,也可能是阿里云
  11. 【优化求解】基于蝙蝠算法求解最优目标matlab源码
  12. 单片机测量PWM占空比的三种方法
  13. mongodb删除某个字段
  14. Markdown文件的标题分级自动编号——Typora
  15. win10+centos8双系统
  16. 数据库的隔离级别以及锁的关系的思考
  17. 卡尔曼滤波器的理解,C代码实现,和opencv里面KalmanFilter 的使用
  18. 安全好用的智能头盔,自带灯光提示与语音功能,力沃BH51M Neo体验
  19. 短信验证码开发教程 - 4.后端篇
  20. 达梦数据库查询模式名,表名,字段名

热门文章

  1. Echarts 雷达简单应用
  2. 基于SmartThreadPool线程池技术实现多任务批量处理
  3. 计算机桌面设置怎么还原,怎么把电脑桌面还原
  4. python 头条 sign 参数 此篇针对实时列表 请使用73版本的谷歌浏览器
  5. 操作系统(六) 页面置换
  6. ipad2018电池测试软件,苹果ipad 2018评测
  7. BMI指数(Body Mass Index身体质量指数),简称体质指数又称体重指数,BMI值是根据你的身高、体重按照一定的公式得出数值,是一个衡量你身体健康的参数。
  8. 印章与印鉴的区别_篆刻与印章到底有什么区别?
  9. 多径效应和多普勒效应
  10. 如何爬取新三板数据库(一)