mysql中复杂sql语句之多重if嵌套语句
今天做项目写的一个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嵌套语句相关推荐
- mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...
- MySQL中的SQL Mode及其作用
点击上方"蓝字" 关注我们,享更多干货! 与其它数据库不同,MySQL可以运行在不同的SQL Mode下.SQL Mode定义MySQL应该支持什么样的SQL语法,以及它应该执行什 ...
- 【MySQL 中 动态sql,游标_】
MySQL 中 动态sql,游标_SQLServer MySQL的技术博客_51CTO博客
- mysql中常用的三种插入数据的语句
mysql中常用的三种插入数据的语句: insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错: replace into表示插入替换数据,需求表中有Prim ...
- mysql中的sql
变量 用户变量: 在用户变量前加@ 系统变量: 在系统变量前加@@ 运算符 算术运算符有: +(加), -(减), * (乘), / (除) 和% (求模) 五中运算 位运算符有: & (位于 ...
- 如何在MySQL中执行SQL?
前言 Mysql是免费的,其他⼏个⽬前暂时收费的,Mysql在互联⽹公司使⽤率也是排名第⼀,资料也⾮常完善,社区也⾮常活跃,所以我们主要学习Mysql.一键获取Mysql笔记文档 Mysql笔记文档5 ...
- mysql常见慢sql,MySQL中慢SQL的查询及原因分析
准备数据 查看系统变量 SHOW VARIABLES LIKE 'slow_query%'; slow_query_log:慢sql日志开启状态 slow_query_log_file:慢sql日志存 ...
- Mysql中慢SQL的分析与优化
为何对慢SQL进行治理 从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短.假设总资源是100,有一条慢SQL占用了30的资源共计1分钟.那么在这1分钟 ...
- php 嵌套 mysql_php – 在MySQL中实现SQL INTERSECT时嵌套过高
我最后的作品之一是基于Yii的硬件目录.每个项目都可以与很多组链接. CREATE TABLE item_group ( id INT(10) UNSIGNED NOT NULL AUTO_INCRE ...
最新文章
- matlab中如何区分两幅图的亮度_高中历史教学中利用老地图设计习题的尝试
- 【深度学习入门到精通系列】Mean Iou
- Access和Access VBA学习总结
- python定义字典列表_[Python基础]五、列表、元组和字典
- java中的jsonjar_java中使用json之相关jar包介绍
- SAP CRM WebClient UI CL_BSP_MESSAGES
- Java基础之PDF文件的合并
- 记住影响客户购买的3个决策关键
- 抛物型方程向前差分matlab,(整理)微分方程数值解(学生复习题).
- 踩着七彩祥云来接你的人不一定是意中人,也可能是阿里云
- 【优化求解】基于蝙蝠算法求解最优目标matlab源码
- 单片机测量PWM占空比的三种方法
- mongodb删除某个字段
- Markdown文件的标题分级自动编号——Typora
- win10+centos8双系统
- 数据库的隔离级别以及锁的关系的思考
- 卡尔曼滤波器的理解,C代码实现,和opencv里面KalmanFilter 的使用
- 安全好用的智能头盔,自带灯光提示与语音功能,力沃BH51M Neo体验
- 短信验证码开发教程 - 4.后端篇
- 达梦数据库查询模式名,表名,字段名
热门文章
- Echarts 雷达简单应用
- 基于SmartThreadPool线程池技术实现多任务批量处理
- 计算机桌面设置怎么还原,怎么把电脑桌面还原
- python 头条 sign 参数 此篇针对实时列表 请使用73版本的谷歌浏览器
- 操作系统(六) 页面置换
- ipad2018电池测试软件,苹果ipad 2018评测
- BMI指数(Body Mass Index身体质量指数),简称体质指数又称体重指数,BMI值是根据你的身高、体重按照一定的公式得出数值,是一个衡量你身体健康的参数。
- 印章与印鉴的区别_篆刻与印章到底有什么区别?
- 多径效应和多普勒效应
- 如何爬取新三板数据库(一)