原始数据
select * from employees where emp_no = '10002';
select * from salaries where emp_no = '10002';
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
+--------+------------+------------+-----------+--------+------------+
1 row in set (0.00 sec)
+--------+--------+------------+------------+
| emp_no | salary | from_date | to_date |
+--------+--------+------------+------------+
| 10002 | 65828 | 1996-08-03 | 1997-08-03 |
| 10002 | 65909 | 1997-08-03 | 1998-08-03 |
| 10002 | 67534 | 1998-08-03 | 1999-08-03 |
| 10002 | 69366 | 1999-08-03 | 2000-08-02 |
| 10002 | 71963 | 2000-08-02 | 2001-08-02 |
| 10002 | 72527 | 2001-08-02 | 9999-01-01 |
+--------+--------+------------+------------+
6 rows in set (0.00 sec)
函数
select
now() as '查询时间',
a.emp_no as '员工编号',
concat(b.last_name, ' ', b.first_name) as '姓名',
concat_ws(':', b.last_name, b.first_name) as '姓名(字符串拼接)',
replace(b.last_name, 'Simmel', 'Simmel-齐美尔') as '姓(替换)',
ucase(b.last_name) as '姓(大写)',
upper(b.last_name) as '姓(大写)',
mid(b.last_name, 1, 1) as '姓(首字母-从索引1开始计数)',
replace(b.first_name, 'Bezalel', '贝扎雷-Bezalel') as '名(替换)',
lcase(b.first_name) as '名(小写)',
lower(b.first_name) as '名(小写)',
length(b.first_name) as '名(长度)',
field('Bezalel', b.last_name, b.first_name) as 'Bezalel(名的索引)',
trim(' 做个人吧 ') as '去除前后空格',
b.gender as '性别',
repeat(b.gender, 10) as '复制10分性别',
if(b.gender = 'F', '女', '男') as '性别(三元运算)',
case
when b.gender = 'F' then '女'
when b.gender = 'M' then '男'
else '变态' end
as '性别(三元运算)',
isnull(b.gender) as '是否为变态(isnull)',
isnull(null) as '是否为null(isnull)',
ifnull(b.gender, '变态') as '是否为变态(ifnull)',
ifnull(null, 'null') as '是否为null(ifnull)',
coalesce(b.gender, '变态') as '是否为变态(coalesce)',
coalesce(null, 'null') as '是否为null(coalesce)',
b.birth_date as '出生日期',
b.hire_date as '雇佣日期',
left(b.birth_date, 4) as '年(从左侧截取4个字符)',
substring(b.birth_date, 6, 2) as '月(从左侧6处开始截取2个字符)',
substr(b.birth_date, 6, 2) as '月(从左侧6处开始截取2个字符)',
right(b.birth_date, 2) as '日(从右侧截取2个字符)',
substring_index('www.baidu.com', '.', -2) as '以.分割字符串逆向截取两个元素',
locate('.', 'baidu.com.cn') as '.第一次出现的位置',
group_concat(a.salary separator ';') as '薪资',
count(a.salary) as '数量',
avg(a.salary) as '平均值',
round(avg(a.salary)) as '四舍五入(平均值)',
format(avg(a.salary), 0) as '平均值(格式化)',
format(avg(a.salary), 10) as '平均值(格式化)',
sum(a.salary) as '总和',
max(a.salary) as '最大值',
min(a.salary) as '最小值',
sqrt(sum(a.salary)) as '总和平方根',
rand() * 100 as '随机数(0到1 * 100)',
floor(1.2345) as '返回不大于参数的最大整数',
floor(-1.2345) as '返回不大于参数的最大整数',
ceiling(1.2345) as '返回不小于参数的最小整数',
ceiling(-1.2345) as '返回不小于参数的最小整数',
abs(-2) as '绝对值',
5 div 2 as '5/2',
mod(3, 2) as '3%2',
mod(2, 3) as '2%3',
pow(2, 3) as '2^3',
power(2, 3) as '2^3',
pi() as '圆周率',
cos(pi()) as 'cos(余弦)',
sin(pi()) as 'sin(正弦)',
tan(pi()) as 'tan(正切)',
acos(1) as 'acos(反余弦)',
asin(1) as 'asin(反正弦)',
atan(1) as 'atan(反正切)',
least(2, 1, 4, 0, 1) as '返回最小值',
greatest(2, 1, 4, 0, 1) as '返回最大值',
degrees(pi()) as '从弧度转换为角度',
radians(180) as '从角度转换为弧度',
truncate(0.123456789, 5) as '保留有效数字(不四舍五入)',
sign(-100) as '参数符号',
sign(0) as '参数符号',
sign(100) as '参数符号'
from
(select * from salaries where emp_no = '10002') as a
inner join
employees as b
on
a.emp_no = b.emp_no
group by
a.emp_no;
日期函数
select date_add('2023-01-01', interval 7 day) as '增加7天',
adddate('2023-01-01', interval 7 hour) as '增加7小时',
adddate('2023-01-01', interval 7 minute) as '增加7分钟',
adddate('2023-01-01', interval '07-01' year_month) as '增加7年1月',
date_sub('2023-01-20', interval 7 day) as '减去7天',
subdate('2023-01-20', interval 7 hour) as '减去7小时',
addtime('00:00:00', '01:00:00') as '增加1小时',
subtime('00:00:00', '07:07:07') as '减去7小时7分7秒',
convert_tz('2023-01-01 01:01:01', '+8:00', '+10:00') as '从+8:00时区修改为+9:00时区',
curdate() as '返回当前日期',
current_date() as '返回当前日期',
current_date as '返回当前日期',
curtime() as '返回当前时间',
current_time() as '返回当前时间',
current_time as '返回当前时间',
now() as '返回当前日期时间',
localtime() as '返回当前日期时间',
localtime as '返回当前日期时间',
localtimestamp() as '返回当前日期时间',
localtimestamp as '返回当前日期时间',
current_timestamp() as '返回当前日期时间',
current_timestamp as '返回当前日期时间',
date_format(now(), '%Y(4位年) - %y(2位年)') as '年',
date(now()) as '从 date 或者 datetime 表达式中提取出日期部分',
datediff('2023-01-01 10:10:10', '1997-02-11 07:01:01') as '日期相减得出天',
day('2020-01-31') as '返回某天是当月的第几天(1-31)',
dayofmonth('2020-02-31') as '返回某天是当月的第几天(1-31)',
dayname('2020-01-31') as '返回某天在用星期中的名称',
dayofweek('2020-01-31') as '返回某天是该星期的第几天',
dayofyear('2020-02-21') as '返回某天是一年中的第几天(1-366)',
extract(year_month from now()) as '提取日期中的某一部分',
from_days(366) as '将天数转换为日期',
from_unixtime(1580436610) as '将某个 UNIX 时间戳格式化为日期',
unix_timestamp('2020-01-31 10:10:10') as '将某个日期格式化为 UNIX 时间戳',
last_day('2020-01-10 10:10:10') as '返回参数日期所在月份的最后一天',
makedate(2023, 100) as '利用年份和某天在该年所处的天数来创建日期',
maketime(112, 50, 50) as '根据小时,分钟和秒值创建并返回时间值',
year(now()) as '由参数返回年',
month(now()) as '由参数返回月份',
monthname(now()) as '由参数返回月份名称',
yearweek(now()) as '由参数返回年周数',
weekofyear(now()) as '由参数返回周数',
weekday(now()) + 1 as '返回星期几',
week(now()) as '由参数返回周数',
time(now()) as '时间',
hour(now()) as '由参数返回小时',
minute(now()) as '由参数返回分钟',
second(now()) as '由参数返回秒',
microsecond(now()) as '由参数返回毫秒',
to_days(now()) as '将日期参数转换为天数',
utc_date() as '返回当前 UTC 日期',
utc_time() as '返回当前 UTC 时间',
utc_timestamp() as '返回当前 UTC 日期和时间',
quarter(now()) as '返回日期参数所在的季度',
sec_to_time(100000) as '将秒数转换为 ''HH:MM:SS'' 格式',
str_to_date('2020-01-10 10:20:30', '%Y-%m-%d %H:%i:%s') as '将字符串转换为日期数据',
sysdate() as '返回函数执行的时的时刻',
time_format('20201010 101010', '%Y-%m-%d %H:%i:%s') as '格式化时间',
time_to_sec('10:10:10') as '将时间参数转换为秒数',
timediff('2020-01-01 10:10:10', '2023-01-01 20:20:20') as '将两个时间相减返回时分秒',
period_add(201808, 2) as '参数年月加上参数月',
period_diff(201808, 201810) as '返回两个年月格式的日期数据之间的月份数',
timestampadd(day, 3, now()) as '3天以后的日期时间',
timestampdiff(second, '2023-07-21 10:10:10', '2023-07-20 01:01:01') as '两个日期时间相减',
timestamp('2020-01-01') as '返回参数的日期时间',
timestamp(now(), '3:00:00') as '返回参数日期时间加上时间';