【数据库学习】六 单行函数

    xiaoxiao2023-10-14  151

    目录

    概念

    常见函数

    一、字符函数

    二、数学函数

    三、日期函数

    四、流程控制函数


    概念

    类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。 好处:1、隐藏了实现细节  2、提高代码的重用性

    调用:select 函数名(实参列表) 【from 表】;

    特点:     ①叫什么(函数名)     ②干什么(函数功能)

    分类:     1、单行函数     如 concat、length、ifnull等     2、分组函数  (功能:做统计使用,又称为统计函数、聚合函数)

    常见单行函数

     一、 字符函数     length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)     concat     substr     instr     trim     upper     lower     lpad     rpad     replace      二、数学函数:     round     ceil     floor     truncate     mod      三、 日期函数:     now     curdate     curtime     year     month     monthname     day     hour     minute     second     str_to_date     date_format     其他函数:     version     database     user     

    四、控制函数     if     case

    一、字符函数

    1.length 获取参数值的字节个数。

    SELECT LENGTH('john');   //执行结果为4

    SELECT LENGTH('你好haha');  //执行结果为10,每个汉字被当作三个字符处理,这与使用的字符集有关

    查看用的字符集:

    2.concat 拼接字符串

    SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;

    3.upper、lower 改变大小写

    4.substr、substring   截取字符,索引从1开始(两个功能一样)

    截取从指定索引处后面所有字符 SELECT SUBSTR('距离女友回国还有七天',5) 显示;

    截取从指定索引处指定字符长度的字符 SELECT SUBSTR('距离女友回国还有七天',3,2) 输出;

    例:姓名中首字符大写,其他字符大写然后用_拼接,显示出来

    SELECT CONCAT( UPPER(SUBSTR(last_name, 1, 1)), '_', UPPER(SUBSTR(last_name, 2)) ) 输出 FROM employees ;

    5.instr 返回子串第一次出现的索引,如果找不到返回0

    SELECT INSTR( '距离女友回国还有七天', '女友' ) AS out_put ;

    6.trim 去前后空格

    SELECT TRIM(' 数据库 ') AS out_put;

    tram还可以用于去掉其他字符,例如:

    SELECT TRIM( 'a' FROM 'aaaaaaaaa数aaaaaaaaaaaa据库aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ) AS out_put ;

    从结果中可以看出,只能去掉前后的’a‘,中间的是无法通过这种方式去掉的,同样空格也是,只能去掉前后的空格,中间的无法去掉。

    7.lpad 用指定的字符实现左填充指定长度

    SELECT LPAD('数据库',7,'*') AS out_put;

    以上含义是一共显示7个字符,如果不够的话就在左边填上*

     8.rpad 用指定的字符实现右填充指定长度

    和上面的功能正好相反,这里不加赘述。

    9.replace 替换

    SELECT REPLACE( '距离女友回国还有七天', '七', '六' ) AS out_put ;

    二、数学函数

    1.round 四舍五入

    保留小数点后两位:

    SELECT ROUND(1.567,2);

    2.ceil 向上取整,返回大于等于该参数的最小整数

    SELECT CEIL(1.001);

    3.floor 向下取整,返回小于等于该参数的最大整数

    4.truncate 截断(截取到小数点后n位)

    SELECT TRUNCATE(1.69999,1);

    5.mod 取余,mod(a,b)相当于a%b

    SELECT MOD(10,3);

    三、日期函数

    1.now 返回当前系统日期+时间

    SELECT NOW();

    2.curdate 返回当前系统日期,不包含时间

    SELECT CURDATE();

     3.curtime 返回当前时间,不包含日期

    SELECT CURTIME();

    4.可以获取指定的部分,年、月、日、小时、分钟、秒

    SELECT YEAR(NOW()) AS 年;

    SELECT MONTH(NOW()) 月;

    5.str_to_date 将字符通过指定的格式转换成日期

    6.date_format 将日期转换成字符

    四、流程控制函数

    1.if函数: if else 的效果

    格式:IF(Condition,A,B)

    意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。

    SELECT IF(10<5,'大','小');

    查询时候有奖金,有的话输出’有奖金,笑‘,没奖金的话’没奖金,哭’ 

    SELECT last_name, commission_pct, IF( commission_pct IS NULL, '没奖金,哭', '有奖金,笑' ) AS 备注 FROM employees ;

    2.case函数的使用一: switch case 的效果 java中

    switch(变量或表达式){     case 常量1:语句1;break;     ...     default:语句n;break; }

    mysql中

    case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ... else 要显示的值n或语句n; end

    例:

    查询员工的工资,要求:

    部门号=30,显示的工资为1.1倍 部门号=40,显示的工资为1.2倍 部门号=50,显示的工资为1.3倍 其他部门,显示的工资为原工资

    SELECT salary AS 原始工资,department_id, CASE department_id WHEN 30 THEN salary*1.1 WHEN 40 THEN salary*1.2 WHEN 50 THEN salary*1.3 ELSE salary END AS 新工资 FROM employees;

     

    3.case 函数的使用二:类似于 多重if java中:

    if(条件1){     语句1; }else if(条件2){     语句2; } ... else{     语句n; }

    mysql中:

    case  when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 ... else 要显示的值n或语句n end

    案:查询员工的工资的情况 如果工资>20000,显示A级别 如果工资>15000,显示B级别 如果工资>10000,显示C级别 否则,显示D级别

    SELECT salary, CASE WHEN salary>20000 THEN 'A' WHEN salary>15000 THEN 'B' WHEN salary>10000 THEN 'C' ELSE 'D' END AS 工资级别 FROM employees;

    最新回复(0)