数据库基本命令之函数篇(三)

排序
  • 单一字段升序
    • select 字段1,字段2 from 表名 order by 排序字段1 asc/desc;
    -- 案例:查询员工的编号、姓名,按照姓名升序排列。(不写默认是升序)
     select empno,ename,sal from emp order by sal asc;
     select empno,ename,sal from emp order by sal;
    
  • 多个字段排序
    • select 字段1,字段2 from 表名 order by 排序字段1 asc/desc,排序字段2 asc/desc;
  • 去重
    • select distinct 要去重的字段 from 表名;
    -- 查询员工表有多少种工作岗位
    select distinct job from emp;
    
    • 注意:distinct只能出现在所有字段的前面,起到联合去重的目的
数据处理函数
  • 如果将字段名看作变量的话,select 后面除了跟变量之外,也是可以跟常量的
  • 比如:select 100;
字符串相关
  • 转大写upper和ucase
-- 查询员工smith的岗位、薪资(假如你不知道数据库表中的人名是大写、小写还是大小写混合)
select ename, job, sal from emp where upper(ename) = 'SMITH';
  • 转小写lower和lcase
  • 截取字符串
    • 语法1:substr(‘被截取的字符串’,起始下标,截取长度)
    • 语法2:substr(被截取的字符串’,起始下标),当第三个参数“截取长度”缺失时,截取到字符串末尾
    • 注意:起始下标从1开始,-1表示从右侧开始的第一个位置
      截子串
  • 获取字符串长度length
    • 语法格式:length(‘字符串’)
    • 一个汉字的长度是2
  • 获取字符个数:char_length
    • 语法格式:char_length(‘字符串’)
    • 一个汉字的字符个数是1
  • 字符串拼接
    • 语法格式:concat(‘字符串1’,‘字符串2’,…)
    • 拼接的数量没有限制
  • 去除字符串前后空白trim
    • 语法格式:trim(‘字符串’)
    • 默认是去前后空白,也可以自己指定要去掉的前后缀
    -- 去掉前置1
    select trim(leading '1' from '1111111hu1111');
    -- 去掉后置1
    select trim(trailing '1' from '1111111hu1111');
    -- 前置1和后置1都去掉
    select trim(both'1' from '1111111hu1111');
    
    • 思考:trim(‘字符串’)的等价写法
数学相关
  • rand():生成0-1之间的随机浮点数
  • rand(x):生成0-1之间的随机浮点数,通过指定整数x来确定每次获取到相同的浮点数
  • round(x):四舍五入,保留整数位,舍去全部小数
  • round(x,y):四舍五入,保留y位小数
  • truncate(x,y)舍去
  • ceil(x):返回大于或等于数值x的最小整数
  • floor(x):返回小于或等于x的最大整数
  • ifnull(x,y):空处理函数,当x为NULL时,将x当做y处理
    • 注意:在SQL语句种,凡是有NULL参与的数学运算,最终的计算结果都是NULL
      在这里插入图片描述
    • 案例:查询每个员工的年薪。(年薪 = (月薪 + 津贴) * 12个月。注意:有的员工津贴comm是NULL。)
    • select ename,(sal + ifnull(comm,0)) * 12 yearsal from emp;
日期和时间相关函数
  • 获取当前日期和时间
    • select now(); 获取的是执行select语句的时刻
    • select sysdate(); 获取的是sysdate()函数的时刻
  • 获取当前日期
    获取当前日期
  • 获取当前时间
    • select curtime();
    • select current_time();
    • select current_time;
  • 获取单独的年、月、日、时、分、秒
    -
    • 获取月:select month(日期);
    • 获取日:select day(日期);
    • 获取时:select hour(日期);
    • 获取分:select minute(日期);
    • 获取秒:select second(日期);
  • 一次性提取给定日期的“年月日”部分
    提取年月日
  • 一次性提取一个给定日期的“时分秒”部分
    提取时分秒
  • date_add函数
    • 给指定的日期添加间隔的时间,从而得到一个新的日期
    • 语法格式:date_add(日期,interval expr 单位);
      某一个日期后
    • 单位涉及以下几种:
      • year:年
      • month:月
      • day:日
      • hour:时
      • minute:分
      • second:秒
      • microsecond:微秒
      • week:周
      • quarter:季度
    • 另外,单位也可以采用复合型单位,例如:
      • SECOND_MICROSECOND
      • MINUTE_MICROSECOND
      • DAY_HOUR

      • 查找三天三个小时前的时间
  • date_format()日期格式化函数
    • 将日期转换成具有某种格式的日期字符串
    • 语法格式:date_format(日期,‘日期格式’)
    • 该函数种日期格式介绍:
      • %Y:四位年份
      • %y:两位年份
      • %m月份
      • %d:日
      • %H:小时
      • %i:分
      • %s:秒
    -- 获取当前时间,以2024-09-09 12:12:12的格式输出
     select date_format(now(),'%Y-%m-%d %H:%i:%s');
    
  • str_to_date函数
    • 将字符串转换成日期
    • 语法格式:str_to_date(‘要转换的字符串’,‘对应的日期类型’)
    --案例: 
    insert into t_student values('zhangsan',str_to_date('10-1-85','%m-%d-%y'));
    
  • dayofweek、dayofmonth、dayofyear
    • dayofweek:一周中的第几天(1-7),周日是1,周六是7
    • dayofmonth:一月中的第几天(1-31)
    • dayofyear:一年中的第几天(1-366)
  • last_day函数
    • 获取给定日期所在月的最后一天
  • datediff函数
    • 计算两个日期之间所差天数
  • timediff函数
    • 计算两个日期所差时间
if函数
  • 如果条件表达式为TRUE则返回表达式值1的值,如果条件为FALSE则返回表达式值2的值:
-- 语法格式如下
SELECT IF(条件表达式,表达式值1,表达式值2);
-- 案例:比较100和500,输出最大者
select if(100 < 500,500,100);
-- 案例:名字是是SMITH的工资上调10%,是FORD的工资上调20%,其他人工资正常
select ename,if(ename='SMITH',sal * 1.1,if(ename='FORD',sal * 1.2,sal)) as sal from emp;
-- 上述需求也可以通过case.. when.. then.. when.. then.. else.. end
cast函数
  • cast函数用于将值从一种数据类型转换为另一种数据类型
  • 语法格式:cast(值 as 数据类型);
  • 可以使用的数据类型有如下几种:
    • date:日期类型
    • time:时间类型
    • datetime:日期时间类型
    • signed:有符号的int类型
    • char:定长字符串
    • decimal:浮点型
加密函数
  • md5函数,可以将给定的字符串经过md5算法进行加密处理,字符串经过加密之后就会生成一个32位的字符串,md5加密后的密文通常是不能解析的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值