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 != '';

SQL中的case when then 判断

  • --简单Case函数
    CASE sex
        WHEN '1' THEN '男'
        WHEN '2' THEN '女'
    ELSE '其他' END

    CASE ISNULL(c.EXECUTION_LIMIT)
    WHEN  TRUE   THEN
        l.GUARANTEE_AMOUN
    ELSE
        l.GUARANTEE_AMOUN-c.EXECUTION_LIMIT
    END ) AS alias
  • --Case搜索函数
    CASE WHEN sex = '1' THEN '男'
    WHEN sex = '2' THEN '女'
    ELSE '其他' END

sql 中的截取

  • substring 返回字符、binary、text 或 image 表达式的一部分。
    • 基本语法: SUBSTRING ( expression , start , length )
    • expression:字符串、二进制字符串、text、image、列或包含列的表达式
    • start:整数,指定子串的开始位置
    • 注:SQL中"1"表示字符串中的第一个字符,而.NET中"0"表示第一个字符
    • length:整数,指定子串的长度(要返回的字符数或字节数)

sql获取字符串长度函数

  • char_lenght返回字符串长度
char_lenght(string)  -- 字符串
  示例:
     SELECT classfyname,CHAR_LENGHT(lassfyname) FROM f79_22_volume 

日期转换

to_char(date,'格式');

select to_date('2005-01-01 ','yyyy-MM-dd') from dual;
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;

计算某日期到当前日期的时间间距

TIP

用到了sql语句中的 TIMESTAMPDIFF( 单位 ,开始时间,结束时间)函数 其中单位可以为:

  • YEAR 年
  • QUARTER 季度
  • MONTH 月
  • WEEk 星期
  • DAY 天
  • HOUR 小时
  • MINUTE 分钟
  • SECOND 秒
  • FRAC_SECOND 毫秒
    • 其中以年为单位,如下所示代码
    SELECT
    TIMESTAMPDIFF( YEAR, '1997-05-31', CURDATE() ) AS '年龄'
  • 查询到当前年份季度的时候
    SELECT
    TIMESTAMPDIFF(
        QUARTER ,
        '1997-05-31',
        CURDATE()
    ) AS '季度'

MySQL 为日期增加一个时间间隔:date_add()

set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);

TIP

MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

  • MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。
  • select datediff('2008-08-08', '2008-08-01'); -- 7
  • select datediff('2008-08-01', '2008-08-08'); -- -7
  • MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值
  • select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
  • select timediff('08:08:08', '00:00:00'); -- 08:08:08
  • 注意:timediff(time1,time2) 函数的两个参数类型必须相同。

MySQL 时间戳(timestamp)转换、增、减函数:

timestamp(date) -- date to timestamptimestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --

distinct

TIP

在 SQL 中,关键字 distinct 用于返回唯一不同的值。其语法格式为: SELECT DISTINCT 列名称 FROM 表名称

关键字 distinct 只能放在 SQL 语句中所有字段的最前面才能起作用,如果放错位置,SQL 不会报错,但也不会起到任何效果。

  • 当 distinct 时作用在多个字段的候,她只会将所有字段值都相同的记录“去重”掉
select *, count(distinct name) from table group by name

idnamecount(distinct name)
1a1
2b1
3c1
  • 最后一项是多余的,不用管就行了,目的达到
  • group by 必须放在 order by 和 limit之前,不然会报错

and与or优先级

TIP

在where中可以包含任意数目的and和or操作符,在没有任何其他符号的时候,例如括号,SQL会首先执行and条件,然后才执行or语句,如:


select * from table where id=1 or id=2 and price>=10;

--这条语句默认执行的是id=2并且price大于等于10的,或者是id=1。
--如果加上括号:

select * from table where (id=1 or id=2) and price>=10;

--则这条语句执行的是id=1或id=2,并且price大于等于10。

substr 截取

1、left(name,4)截取左边的4个字符

SELECT LEFT(201809,4)

结果:2018

2、right(name,2)截取右边的2个字符

SELECT RIGHT(201809,2) 月份

结果:09

3、SUBSTRING(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符

SELECT SUBSTRING('成都融资事业部',5,3)

结果:事业部

4、SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符

SELECT SUBSTRING('成都融资事业部',3)

结果:融资事业部

5、SUBSTRING(name, -4) 截取name这个字段的第 4 个字符位置(倒数)开始取,直到结束

SELECT SUBSTRING('成都融资事业部',-4)

结果:资事业部

6、SUBSTRING(name, -4,2) 截取name这个字段的第 4 个字符位置(倒数)开始取,只截取之后的2个字符

SELECT SUBSTRING('成都融资事业部',-4,2)

结果:资事

注意:我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。

7、substring_index('www.baidu.com', '.', 2) 截取第二个 '.' 之前的所有字符

SELECT substring_index('www.baidu.com', '.', 2)

结果:www.baiduopen in new window

8、substring_index('www.baidu.com', '.', -2) 截取第二个 '.' (倒数)之后的所有字符

SELECT substring_index('www.baidu.com', '.', -2)

结果:baidu.com

9、SUBSTR(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符

SELECT SUBSTR('成都融资事业部', 1, CHAR_LENGTH('成都融资事业部')-3)

结果:成都融资