0
点赞
收藏
分享

微信扫一扫

SQL常用字符串函数、日期函数、流程控制函数汇总

cwq聖泉寒江2020 2022-02-25 阅读 53
/*
 字符串函数讲解
*/
# 返回第一个字符的ascii的码值
select ascii('abc') ;

# 返回内存层面的字符数
select char_length('aaa哈哈');

# 返回底层真正存储的字节数
select length('aaa哈哈');

# 以指定字符连接字符串(第一个参数是连接符),
select concat_ws('-','hello','word','beijing');

# 替换指定索引后的字符,注意:在sql中字符串的索引是从1开始的,从第二个字符开始,往后两个字符,替换成mmm
select insert('hello',2,2,'mmm')
from dual;

# 替换字符,将字符串出现的第二个参数的字符,替换为第三个字符
select replace('helloll','ll','mm')
from dual;

# 转换大小写
select upper('abC'),lower('abC'),ucase('abC'),lcase('abC');

# 截取前或后的固定部分
select left(123456,4),right(123456,4);

# 去除前后空格
select ltrim('   aaa'),rtrim('   a     '),trim('    av    ')
from dual;

# 去除前后指定字符
select trim('oo' from 'ooooollasdaoo');

# 重复指定次数
select repeat('aaa',4);

# 截取字符串
select substr('hello world',1,10);

select substr(now(),1,16);

# 返回某个字符串在字符中首次出现的位置
select locate('lo','hello');

# 翻转字符串
select reverse('hello');

# 比较两个字符串,如果相等返回null,否则返回参数一的值
select nullif(null,null);


# department_name 这一列的值不是常量,而是动态根据每一列计算出来的
select *,(select department_name from departments where department_id = e.department_id) as department_name
from employees e;


select *
from departments;


# 日期函数
# 获取日期时间,日期,时间
select now(),curdate(),curtime();

# 获取年,月,日,时分秒参数需要是日期类型,如果字符串符合默认的日期格式,则mysql会做隐世转换
select year('2021-12-23'),month('2021-12-23'),day('2021-12-23'),
       hour(now()),minute(now()),second(now());

# 返回自从1970-01-01开始至指定时间的时间戳,默认为当前时间
select unix_timestamp(),unix_timestamp('2021-02-05');

# 根据时间戳转换为日期,第二个参数可一定格式化字符串
select from_unixtime(1633104000,'%Y年%m月%d日');

# 日期增减函数 DATE_ADD 等同于 ADDDATE
select date_add(now(),interval -1 year),date_add(now(),interval 2 year ),
       adddate(now(),interval -7 minute );

# 同时加1年和一个月、减一年和一个月
select adddate(now(),interval '1_1' year_month ),adddate(now(),interval '-1_-1' year_month );

# 计算两个日期之间相差的 (天) 数 (前 - 后)
select datediff(now(),adddate(now(),interval -1 year ));

# 当前月份的最后一天的日期
select last_day(now());

# 日期格式化为字符串(当字符串符合日期的默认格式时,mysql会进行隐世转换)
select date_format(now(),'%Y-%m-%d %H:%i:%s');

# 字符串转为日期
select str_to_date('2021年-10月-05 17:-05-35','%Y年-%m月-%d %H:-%i-%s');

# get_format获取某个地区的默认日期字符串格式
select date_format(now(),get_format(DATETIME ,'ISO'));


# 流程控制函数
# if
select last_name,salary,if(salary > 6000,'高工资','低工资') as 'grades_desc'
from employees;

# case wher then when then else end
# 相当于java中的if else if else
select last_name,salary,case when salary > 1000 and salary < 3000 then '下等工资'
when salary >= 3000 and salary < 8000 then '中等工资'
when salary >= 8000 and salary < 10000 then '高等工资'
else '特高工资' end
from employees;

# case 后 跟一个变量值,类似于switch case 结构
# select 查询相当于自带循环,每一条每一条的去计算
select last_name,case department_id when 10 then salary*1.1
when 20 then salary*1.2
when 30 then salary*1.3
    else salary * 1.4
end as salary_bei,salary,department_id
from employees;

/**
 如果这个列名是个变量,则取表中该列的值
  如果某一列的值是个表达值,则会每一行的去计算
  如果某一列的值是常量,则每一列都固定是该常量
 */

#  统计6000一下和6000以上工资的人数,不光可以根据已有的字段分组,也可以根据其他新增的列分组
select last_name,salary, if(salary >= 6000,'6000以上','6000以下') as salary_grade
from employees;
举报

相关推荐

0 条评论