1.1函数语法定义
1.2函数实际应用:
语法:
案例:
SELECT * from user
where create_time between DATE_SUB(NOW(),INTERVAL 30 day) and DATE_SUB(NOW(),INTERVAL -30 day)
SELECT * from second_customer_manager_his WHERE delete_flag='0' AND back_cup_date BETWEEN '2023-02-22' and DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 day),'%Y-%m-%d');
select now();-- 当前时间
--结果: 2018-12-06 20:35:21
select DATE_SUB(now(), INTERVAL 30 DAY);-- 前三十天
--结果: 2018-11-06 20:35:21
select DATE_SUB(now(), INTERVAL -30 DAY);-- 后三十天(函数本身是减法,用负数就是加)
--结果: 2019-01-05 20:35:21
select DATE_SUB(now(), INTERVAL 1 month);-- 减去一个月
--结果: 2018-11-06 20:35:21
select DATE_SUB(now(), INTERVAL 1 year);-- 减一年
--结果: 2017-12-06 20:35:21
DATE_ADD()函数的使用效果与DATE_SUB相反。
**语法:**同DATE_SUB
set @dt = now();
select date_add(@dt, interval 1 day); -- 获取当前时间的后一天
select date_add(@dt, interval 1 hour); -- 获取当前时间的后一小时
select date_add(@dt, interval 1 minute); -- …
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
实现日期/时间转换为字符串
语法:
date_format(date,format), time_format(time,format)
示例:
select date_format('2018-08-11 12:30:00', '%Y %m %d %H%i%s');
# 2018 08 11 123000
常见format:
‘%Y-%m-%d %H:%i:%s’
‘%Y %m %d %H%i%s’
实现字符串转化成日期
语法:
str_to_date(str, format)
示例:
select str_to_date('08/11/2018', '%m/%d/%Y'); -- 2018-08-11
select str_to_date('08/11/08' , '%m/%d/%y'); -- 2018-08-11
select str_to_date('08.11.2008', '%m.%d.%Y'); -- 2018-08-11
select str_to_date('08:00:30', '%h:%i:%s'); -- 08:00:30
select str_to_date('08.11.2018 08:00:30', '%m.%d.%Y %h:%i:%s');
timestampdiff(interval,start_time,end_time)
计算时间差函数,interval代表指定的单位,常用可选:
YEAR 年数
MONTH 月数
DAY 天数(返回秒数差除以3600*24的整数部分)
HOUR 小时(返回秒数差除以3600的整数部分)
MINUTE 分钟(返回秒数差除以60的整数部分)
SECOND 秒
datediff(end_time,start_time)
两个日期相减,返回天数,大的值在前
timediff(end_time,start_time)
两个日期相减,返回 time 差值(时分秒格式),大的值在前
last_day(date)
获取某一个月最后一天的日期
SELECT LAST_DAY('2022-04-12') 取2022年4月的最后一天的日期
输出结果:2022-04-30
语法:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc][separator ‘分隔符’] )
作用:
按照指定字段分组并将分组的值拼接成字符串,需要要配合关键字GROUP BY来使用。
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
拼接成的字符串长度限制:默认是1024个字符。
查看方法:show variables like ‘group_concat_max_len’;
SELECT variety_type,GROUP_CONCAT(DISTINCT variety_name ORDER BY create_date DESC SEPARATOR ';') from variety_basic GROUP BY variety_type;
语法:
CONCAT_WS(separator,str1,str2,…)
作用:
和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)。
说明:
第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
SELECT CONCAT_WS(',',variety_name,variety_type) FROM variety_basic;
SELECT CONCAT_WS(',',variety_name,variety_type) as value FROM variety_basic WHERE variety_type='CFFEX';
GROUP_CONCAT函数和CONCAT_WS函数组合:
使用,连接variety_type和variety_name,并每组的variety_type值使用;连接返回
SELECT variety_type,GROUP_CONCAT(CONCAT_WS(',',variety_name,variety_type) SEPARATOR ';') from variety_basic GROUP BY variety_type;
功能:
将多个字符串连接成一个字符串。
语法:
concat(str1, str2,…)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
举例:
SELECT CONCAT(variety_name,':',variety_desc) aa FROM variety_basic WHERE variety_type='CFFEX';
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofti7lHm-1677480697893)(C:\Users\Lenovo\AppData\Local\Temp\1677477411835.png)]
组合IFNULL使用:
SELECT CONCAT(variety_name,':',IFNULL(variety_desc,'00')) aa FROM variety_basic WHERE variety_type='CFFEX';
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
语法:
IFNULL(expression, alt_value)
如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。
参数说明:
expression 必须,要测试的值
alt_value 必须,expression 表达式为 NULL 时返回的值
实例:
第一个参数为 NULL:
SELECT IFNULL(NULL, “RUNOOB”);
以上实例输出结果为:
RUNOOB
第一个参数不为 NULL:
SELECT IFNULL(“Hello”, “RUNOOB”);
以上实例输出结果为:
Hello
SQL 字符函数:
字符或字符串函数是将一个或多个字符作为参数,并在所需操作后返回一个字符。属于字符函数的有:
lower 函数用于将字符或字符串转换为小写。
语法 —
SELECT LOWER(string);
示例 —
SELECT LOWER('Lower This STRING');
输出 —
lower this string
和 lower 函数一样,UPPER() 函数也能将所有字母转换为大写字母。
trim 函数可以删除任何前导或尾随空格。
语法 —
SELECT TRIM(STRING);
示例 —
SELECT TRIM(' Remove whitespace ')
输出 —
Remove whitespace
另外,我们还可以用 LTRIM() 和 RTRIM() 函数分别从左边或右边对空格进行删除。
substring 函数可以从给定字符串中提取子字符串。它需要三个参数:string, start index, 和 length.
语法 —
SELECT SUBSTRING(string, start, length);
示例 —
SELECT SUBSTRING('How to use SQL', 5, 2);
输出 —
to
请注意,在 SQL 中,第一个字符是位置 1,而不是像大多数编程语言那样是 0。
另外,字符串函数还有 — REVERSE(str):反转 ,LENGTH(str) 。
substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔:
(1).当n大于0时取第n个分隔符(n从1开始)左边的全部内容;
(2).当n小于0时取倒数第n个分隔符(n从-1开始)右边的全部内容;
语法:replace(字符串,原字符,新字符)
聚合函数为整个数组(使用 GROUP BY 子句)或整个表生成单个值。常用的如下:
语法:
第一种:case用于实现简单的"等于"判断。
case 字段名
when ‘字段值’ then ‘需要返回的值’/字段
when ‘字段值’ then ‘需要返回的值’ /字段
else ‘剩余所有的需要返回的值’ /字段
end
例子:
SELECT
( CASE variety_desc WHEN '期货' THEN 'QH' WHEN '现货期权' THEN variety_desc ELSE '未知类型' END ) as bb
FROM
variety_basic
WHERE
variety_type = 'CFFEX';
第二种:case还可用于"有条件"的逻辑判断。
case when 字段名 = ‘字段值’ then ‘需要返回的值’ else ‘剩余所有的需要返回的值’ end
SELECT
( CASE WHEN variety_desc = '期货' THEN 'QH' WHEN '现货期权' THEN variety_desc ELSE '未知类型' END ) AS bb
FROM
variety_basic
WHERE
variety_type = 'CFFEX';
第三种:判断字段为null的方法
SELECT
( CASE WHEN variety_desc IS NULL THEN 0 ELSE 1 end) AS bb
FROM
variety_basic
WHERE
variety_type = 'CFFEX';
SELECT AVG(column_name) FROM table_name;
count 函数获取值列表,并返回所提供值的总计数。Count 函数返回值的总计数,而不是每个字符的频率。
语法 —
SELECT COUNT(DISTINCT column_name) FROM table_name;
查询 — 我想知道工资大于或等于 80,000 的员工人数。
SELECT COUNT(EID) FROM employee WHERE salary >= 80000;
max 函数接收数值列表并返回最大值。
语法 —
SELECT MAX(column_name) FROM table_name;
查询 — 我想知道所有员工中的最高薪资是多少。
SELECT MAX(salary) FROM employee;
最高工资
此外还有 MIN() 函数,可以从数字列表中返回最小值。
Sum 函数返回提供的数值列表的总和。
语法 —
SELECT SUM(column_name) FROM table_name;
查询 — 我想知道公司一年内支付的工资总额。
SELECT SUM(salary) FROM employee;
工资总和
SQL 算术函数:
SQL 算术函数执行数学运算,并从数值返回单个值。它是一种 SQL 标量函数。
算术函数可接受的数据类型有:小数、整数、浮点数、实数。
ROUND 函数取一个小数,并将其四舍五入到最接近的整数。
语法 —
SELECT ROUND(column_name, decimals) FROM table_name;
SELECT ROUND(decimal_num);
例如,我想将 5.699 舍入到小数点后一位。
SELECT ROUND(5.699, 1);
产出 — 5.7
其他类似的函数有 CEIL() 和 FLOOR()。CEIL() 函数将值舍入为下一个整数,FLOOR() 函数将值舍入为上一个(较低的)整数。这两个函数的语法和 ROUND() 相同。
abs 函数获取一个数值并返回绝对值。这意味着它只取这个值而忽略符号。
语法 —
SELECT ABS(column_name) FROM table_name;
SELECT ABS(value);
例如,我想要 -12.22 和 43.3 的绝对值
SELECT ABS(-12.22);
输出 —12.22
SELECT ABS(43.3);
产出 — 43.3
请注意, -12.22 的负号被 ABS() 函数去掉了。
power 函数用于将一个数字的值返回到另一个数字。这两个数字都作为参数传递。
语法 —
SELECT POWER(base, exponenet);
例如,如果我获得 2 的 5 次幂。
SELECT POWER(2, 5);
输出 —32
其他语法差不多的算术函数有 -
MOD() — 返回 A 除以 B 后剩余的余数。
SQRT() — 返回数字的平方根。
EXP() — 返回对给定参数提出的 e。e 的值约为 2.718。