August 15, 2022
By: cisco

sql常用函数

数学函数

ABS(x) 返回x的绝对值

    SELECT ABS(98.77),ABS(20-16.8),ABS(5.6*2),ABS(-0.3),ABS(-8),ABS(-(8/2));

CEILING(x) 返回大于等于x的最小整数值(向上取整)

      SELECT CEILING(1.8),CEILING(5),CEILING(-3.5),CEILING(-3)
    =>
        CEILING(1.8) | CEILING(5) |CEILING(-3.5)|CEILING(-3)
        2            |   5        |   -3        | -3

FLOOR(x) 返回小于等于x的最大整数值(向下取整)

 SELECT FLOOR(1.8) ,FLOOR(5),FLOOR(-3.5),FLOOR(-3)

=>
  FLOOR(1.8) |FLOOR(5)|FLOOR(-3.5)|FLOOR(-3)
  1          |   5    |   -4      |  -3

ROUND(x,y) 返回参数x的四舍五入的有y位小数的值

返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。

 SELECT ROUND(1.23),ROUND(1.56),ROUND(1.65090384,3),ROUND(1.65,0)
=>
       ROUND(1.23)|ROUND(1.56)|ROUND(1.65090384,3)|ROUND(1.65,0)
          1       |  2        |    1.651          |    2

SIGN(x) 返回代表数字x的符号的值

对一个自然数进行判断,如果为零,返回0,如果为负数,统一返回-1,如果为正数,统一返回1

SELECT SIGN(-12),SIGN(0),SIGN(2)
=>

SIGN(-12)|SIGN(0)|SIGN(2)|SIGN(100)

-1       |  0    |1     |1

聚合函数

AVG(col) 返回指定列的平均值

COUNT(col) 返回指定列中非NULL值的个数

MIN(col) 返回指定列的最小值

MAX(col) 返回指定列的最大值

SUM(col) 返回指定列的所有值之和

GROUPCONCAT(col) 返回由属于一组的列值连接组合而成的结果

 SELECT  GROUP_CONCAT(size_no),body_type FROM t_spec WHERE company_id=550 AND category_id=5501002  GROUP BY body_type
=>
      GROUP_CONCAT(size_no)|body_type
      84.0,86.0,88.0,90.0  | A
      92.0,94.0,96.0,98.0  | B

字符串函数

CONCAT(s1,s2…,sn)将s1,s2…,sn连接成字符串

SELECT CONCAT(category_id,body_type)as a,CONCAT_WS('-',category_id,body_type,size_spec)as b FROM t_spec  WHERE company_id=550 AND category_id=5501002  AND body_type='A'
     =>
      a       |    b
     5501002A |5501002-A-74/A
     5501002A | 5501002-A-78/A

CONCATWS(sep,s1,s2…,sn)将s1,s2…,sn连接成字符串,并用sep字符间隔

SELECT CONCAT_WS('-',category_id,body_type,size_spec) as b,CONCAT_WS('@',category_id,body_type,size_spec) as c
         FROM t_spec  WHERE company_id=550 AND category_id=5501002  AND body_type='A'

       =>    b            |        c
        5501002-A-74/A | 5501002@A@74/A
       5501002-A-76/A  | 5501002@A@76/A

INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

SELECT INSERT('hello,world,verygood',7,5, '你好')
 =>
   hello,你好,verygood

FINDINSET(str,list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置

起始数是从1开始计算起的; 若str存在list中,则返回该str所在位置的数字(大于0); 如果str不在strlist 或strlist 为空字符串,则返回值为 0,并且如任意一个参数为空,则返回值为 0 也可以说返回NULL

    SELECT FIND_IN_SET('1','0,1,3,5')as a,FIND_IN_SET('重庆','北京,上海') as a1,FIND_IN_SET('青岛','青岛-济南-威海') as a2,FIND_IN_SET('', '1,2,3')as  kongval,FIND_IN_SET(NULL, '1,3') as nullval
   =>  a | a1 | a2 | kongval | nullval
      2  | 0  | 0  | 0       | null


​ ;; find_in_set()与in()区别 ​ select * from per where find_in_set(id,'2,3,4,5,6'); ​ select * from per where id in(2,3,4,5,6); ​
find_in_set() like() 10 10,1,2

   like %1%   => 10 ,1
  find_in_set(1,'10,1,2')

LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果

UCASE(str)或UPPER(str) 返回将字符串str中所有字符转变为大写后的结果

LEFT(str,x)返回字符串str中最左边的x个字符

        SELECT LEFT('hello', 1),LEFT('hello',0),LEFT('hello',5),LEFT('hello', 9),LEFT(NULL,1)
=>
      LEFT('hello', 1) |LEFT('hello',0)|LEFT('hello',5)|LEFT('hello', 9)|LEFT(NULL,1)
       h               |               |   hello       | hello          | NULL

LENGTH(s) 返回字符串str中的字符数

LTRIM(str) 从字符串str中切掉开头的空格

  select LTRIM('  he llo') as a,LTRIM('  world') as b
=>
      a    | b
     he llo| world

RIGHT(str,x) 返回字符串str中最右边的x个字符

 SELECT RIGHT('hello', 1),RIGHT('hello',0),RIGHT('hello',5),RIGHT('hello', 9)
=>
      RIGHT('hello', 1) | RIGHT('hello',0)|RIGHT('hello',5)|RIGHT('hello', 9)
           o            |                 |  hello         |  hello 

STRCMP(s1,s2)比较字符串s1和s2

s1=s2,返回0; s1<s2,返回-1; s1>s2,返回1; 如果一个或两个字符串均为NULL,返回null

SELECT ASCII('A'),ASCII('B'),STRCMP('A', 'A'),STRCMP('A','B'),STRCMP('B','A'),STRCMP(NULL, 'a');
  =>
        ASCII('A')|ASCII('B')|STRCMP('A', 'A')|STRCMP('A','B')|STRCMP('B','A')|STRCMP(NULL, 'a')
         65       | 66       |      0         |     -1        |      1        | NULL

TRIM(str)去除字符串首部和尾部的所有空格

SELECT TRIM('   hello   '),TRIM('  hello'),TRIM('hello  '),TRIM('he  llo')
=>
 TRIM('   hello   ')|TRIM('  hello')|TRIM('hello  ')|TRIM('he llo')
 hello              | hello         |     hello     |  he llo

日期和时间函数

NOW() 返回当前的日期和时间

CURDATE()或CURRENTDATE() 返回当前的日期

CURTIME()或CURRENTTIME() 返回当前的时间

DATEADD(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化)

DATESUB(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化)

DATEDIFF(startdate,enddate) 返回结束日期减去开始日期的天数

DATEFORMAT(date,fmt) 依照指定的fmt格式格式化日期date值

DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)

DAYOFMONTH(date) 返回date是一个月的第几天(1~31)

DAYOFYEAR(date) 返回date是一年的第几天(1~366)

DAYNAME(date) 返回date的星期名

FROMUNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts

MONTH(date) 返回date的月份值(1~12)

MONTHNAME(date) 返回date的月份名

HOUR(time) 返回time的小时值(0~23)

MINUTE(time) 返回time的分钟值(0~59)

QUARTER(date) 返回date在一年中的季度(1~4)

WEEK(date) 返回日期date为一年中第几周(0~53)

YEAR(date) 返回日期date的年份(1000~9999)

加密函数

控制流函数

CASE WHEN[test1] THEN [result1]…ELSE [default] END如果testN是真,则返回resultN,否则返回default

        SELECT body_type,CASE 
        WHEN  body_type ='A' THEN '紧身'
        WHEN  body_type ='B' THEN '合体'
        WHEN  body_type ='C' THEN '宽松'
        ELSE'未知'
END as name
FROM t_spec WHERE company_id=550 AND category_id=5501002

    => body_type|name
     A       | 紧身
     B       | 合体
     C       | 宽松
   NULL      | 未知

CASE [test] WHEN[val1] THEN [result]…ELSE [default]END 如果test和valN相等,则返回resultN,否则返回default

SELECT body_type,CASE body_type
        WHEN  'A' THEN '紧身'
        WHEN  'B' THEN '合体'
        WHEN  'C' THEN '宽松'
        ELSE'未知'
END as name
FROM t_spec WHERE company_id=550 AND category_id=5501002


​ => body_type|name ​ A | 紧身 ​ B | 合体 ​ C | 宽松 ​ NULL | 未知

IF(test,t,f) 如果test是真,返回t;否则返回f

select if('a' ,'a','b'),if(null,'a','b')
     =>  a | b

IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否则返回arg2

NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否则返回arg1

格式化函数

DATEFORMAT(date,fmt) 依照字符串fmt格式化日期date值

TIMEFORMAT(time,fmt) 依照字符串fmt格式化时间time值

FORMAT(x,y) 把x格式化为以逗号隔开的数字序列,y是结果的小数位数

INETATON(ip) 返回IP地址的数字表示

INETNTOA(num) 返回数字所代表的IP地址

类型转化函数

CAST( expression AS datatype ) 它可以把一个值转化为指定的数据类型

类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED

CONVERT(datatype[(length)], expression [, style]) 把一个值转化为指定的数据类型

在时间转化中一般用到convert,因为它比cast多加了一个style,可以转化成不同时间的格式。

系统信息函数

DATABASE() 返回当前数据库名

CONNECTIONID() 返回当前客户的连接ID

USER()或SYSTEMUSER() 返回当前登陆用户名

VERSION() 返回MySQL服务器的版本

Tags: mysql functions