今天,在修改项目bug时遇到一些需要计算的功能实现,虽然可以用java代码写,但是由于时间较为充裕,有尝试用sql写一下,学习到了if函数

if(o.containerSendNet>0 and o.pieceNumber=0 , o.containerSendNet*IFNULL(o.transport_price2,0),0) transitWeightMoney

上面这段话的意思是:

如果o.containerSendNet>0 and o.pieceNumber= 成立为true,则返回o.containerSendNet*IFNULL(o.transport_price2,0),即transitWeightMoney = o.containerSendNet*IFNULL(o.transport_price2,0)

否则返回0,即transitWeightMoney  = 0;

而IFNULL函数,则是判断第一个表达式是否为null,即IFNULL(o.transport_price2,0),如果o.transport_price2不为null,则返回这个值,否则返回0。

下面摘抄我看到的一篇博客:https://blog.csdn.net/qq_36850813/article/details/80449860

IF 表达式

IF( expr1 , expr2 , expr3 )  

expr1 的值为 TRUE,则返回值为 expr2 
expr1 的值为FALSE,则返回值为 expr3

如下:

SELECT IF(TRUE,1+1,1+2);
-> 2 SELECT IF(FALSE,1+1,1+2);
-> 3 SELECT IF(STRCMP("111","222"),"不相等","相等");
-> 不相等

那么这个 IF 有啥用处呢?举个例子: 
查找出售价为 50 的书,如果是 java 书的话,就要标注为 已售完

那么对应的SQL语句该怎样去写呢?

select *,if(book_name='java','已卖完','有货') as product_status from book where price =50  

IFNULL 表达式

IFNULL( expr1 , expr2 )  

判断第一个参数expr1是否为NULL:

    如果expr1不为空,直接返回expr1;

    如果expr1为空,返回第二个参数 expr2

常用在算术表达式计算和组函数中,用来对null值进行转换处理(返回值是数字或者字符串)

在 expr1 的值不为 NULL的情况下都返回 expr1,否则返回 expr2,如下:

    SELECT IFNULL(NULL,"11");
-> 11 SELECT IFNULL("00","11");
-> 00

NULLIF 表达式

NULLIF(expr1,expr2):如果两个参数相等则返回NULL,否则返回第一个参数的值expr1


mysql> select nullif(1,1),nullif(123,321);
+-------------+-----------------+
| nullif(1,1) | nullif(123,321) |
+-------------+-----------------+
| NULL | 123 |
+-------------+-----------------+

3、在SQL语句中实现“if-then-else”逻辑计算功能

  有两种形式:simple case和searched case

1)simple case的语法结构:

CASE  value

    WHEN  [compare_value] THEN  result

    [WHEN [compare_value] THEN  result ...] 

    [ELSE  result]  END

语义:

  将case后面的值value分别和每个when子句后面的值compare_value进行相等比较:

    如果一旦和某个when子句后面的值相等则返回相应的then子句后面的值result;

    如果和所有when子句后面的值都不相等,则返回else子句后面的值;

    如果没有else部分则返回null。

注意:

  ①value可以是字面量、表达式或者列名

  ②CASE表达式的数据类型取决于跟在then或else后面的表达式的类型

类型必须相同(可尝试做隐式类型转换),否则出错

mysql> select userid,case salary
-> when 1000 then 'low'
-> when 2000 then 'med'
-> when 3000 then 'high'
-> else '无效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| 1 | low |
| 2 | med |
| 3 | high |
| 4 | 无效值 |
| 5 | low |
+--------+--------------+

2)searched  case的语法结构:

CASE

    WHEN [condition] THEN result

    [WHEN [condition] THEN result ...]

    [ELSE result]  END

语义:

  如果某个when子句后面的条件condition为true,则返回相应的when子句后面的值result;

  如果所有的when子句后面的条件condition都不为true,则返回else子句后面的值;

  如果没有else部分则返回null。

mysql> select userid,case
-> when salary<=1000 then 'low'
-> when salary=2000 then 'med'
-> when salary>=3000 then 'high'
-> else '无效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| 1 | low |
| 2 | med |
| 3 | high |
| 4 | 无效值 |
| 5 | low |
+--------+--------------+

Sql中的if函数学习的更多相关文章

  1. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  2. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  3. SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  4. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  5. SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数

    一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...

  6. SQL点滴30—SQL中常用的函数

    原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...

  7. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  8. SQL中的object_id函数

    关于SQL中的object_id函数:应该就是指系统表中存储着数据库的所有对象 每一个对象都有一个唯一的标识符Id进行标识object_id 就是根据对象名称返回改对象的Idobject_name 就 ...

  9. SQL中的charindex函数与reverse函数用法

       ----------------------首先介绍charindex函数-----------------------------                                ...

随机推荐

  1. Java Web之分页的实现(通用)

    一.用到的工具类的封装 为了实现代码的重用性,我们将经常用到的代码封装到工具类中,以便在任何地方都可以调用 1.获取路径工具 在jsp页面中,我们经常会向Servlet发送请求,并通过反射,实现通过传 ...

  2. git教程2-git基础

    clone 使用IDE,直接在vcs里,从git checkout,方便. commit commit是提交到本地git仓库,本质是做一次存储快照. 可以多次commit之后,再次push到git服务 ...

  3. 2017 ACM/ICPC Asia Regional Shenyang Online transaction transaction transaction

    Problem Description Kelukin is a businessman. Every day, he travels around cities to do some busines ...

  4. 自定义ClassLoader加载加密的class文件

    package com.yd.wmsc.util; public class Test { public void say(){ System.out.println("Say Hello& ...

  5. DateAdapterForDay

    public class DateAdapterForDay extends XmlAdapter<String, Date> { private SimpleDateFormat dat ...

  6. python3+Appium自动化05-xpath定位

    概念 xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少.通常使用xpath相对路径和属性 ...

  7. 【Java】国内maven私服

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  8. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题

    首先要做的就是配置域名的MX 记录啦: 先添加一条A记录: mail.abc.com 指向 你的服务器IP! 然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为 ...

  9. js对secure的支持是没问题的,httponly是为限制js而产生的,当然httponly的cookie也不会被js创建

    function setCookie4(c_name,value,expiredays){ var cookieStr = ""; var exdate=new Date(); e ...

  10. linux系统的安全小知识

    最近安装linux虚拟机,出了几个小问题:1. 只有root用户  2.ftp连接不上  3.ssh连接虚拟机如何免密 1.创建用户 useradd –d /usr/sam -m sam    创建用 ...