SQL函数

SQL函数

DATE_SUB()函数

1.1函数语法定义

SQL函数_第1张图片

1.2函数实际应用:

语法:

  • 获取当前日期:select curdate()
  • 获取当前日期前一天:select date_sub(curdate(),interval 1 day)
  • 获取当前日期后一天:select date_sub(curdate(),interval -1 day)

案例:

  • 当前日期的前三十天和后三十天 (DATE_SUB函数本身是减法,用负数就是加)
SELECT * from user 
where create_time between DATE_SUB(NOW(),INTERVAL 30 day) and DATE_SUB(NOW(),INTERVAL -30 day)
  • 组合DATE_FORMAT格式化等函数使用
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_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(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_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函数

语法:

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;

SQL函数_第2张图片

CONCAT_WS函数

语法:

CONCAT_WS(separator,str1,str2,…)

作用:

和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)。

说明:

第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

SELECT CONCAT_WS(',',variety_name,variety_type) FROM variety_basic;

SQL函数_第3张图片

SELECT CONCAT_WS(',',variety_name,variety_type) as value FROM variety_basic WHERE variety_type='CFFEX';

SQL函数_第4张图片

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;

SQL函数_第5张图片

concat()函数

功能:

将多个字符串连接成一个字符串。

语法:

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';

SQL函数_第6张图片

IFNULL() 函数

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() 函数

lower 函数用于将字符或字符串转换为小写。

语法 —

SELECT LOWER(string);

示例 —

SELECT LOWER('Lower This STRING');

输出 —

lower this string

和 lower 函数一样,UPPER() 函数也能将所有字母转换为大写字母。

TRIM() 函数

trim 函数可以删除任何前导或尾随空格。

语法 —

SELECT TRIM(STRING);

示例 —

SELECT TRIM(' Remove whitespace ')

输出 —

Remove whitespace

另外,我们还可以用 LTRIM()RTRIM() 函数分别从左边或右边对空格进行删除。

SUBSTRING() 函数

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()文本分割函数

    substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔:

    (1).当n大于0时取第n个分隔符(n从1开始)左边的全部内容;

    (2).当n小于0时取倒数第n个分隔符(n从-1开始)右边的全部内容;

replace() 替换函数

语法:replace(字符串,原字符,新字符)

二、聚合函数

聚合函数为整个数组(使用 GROUP BY 子句)或整个表生成单个值。常用的如下:

CASE WHEN函数

语法:

第一种: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';

SQL函数_第7张图片

第二种: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';

SQL函数_第8张图片

第三种:判断字段为null的方法

SELECT
	( CASE WHEN variety_desc IS NULL THEN 0 ELSE 1 end) AS bb 
FROM
	variety_basic 
WHERE
	variety_type = 'CFFEX';

SQL函数_第9张图片

AVG() 函数

SELECT AVG(column_name) FROM table_name;

COUNT() 函数

count 函数获取值列表,并返回所提供值的总计数。Count 函数返回值的总计数,而不是每个字符的频率。

语法 —

SELECT COUNT(DISTINCT column_name) FROM table_name;

查询 — 我想知道工资大于或等于 80,000 的员工人数。

SELECT COUNT(EID) FROM employee WHERE salary >= 80000;

MAX() 函数

max 函数接收数值列表并返回最大值。

语法 —

SELECT MAX(column_name) FROM table_name;

查询 — 我想知道所有员工中的最高薪资是多少。

SELECT MAX(salary) FROM employee;

img

最高工资

此外还有 MIN() 函数,可以从数字列表中返回最小值。

SUM() 函数

Sum 函数返回提供的数值列表的总和。

语法 —

SELECT SUM(column_name) FROM table_name;

查询 — 我想知道公司一年内支付的工资总额。

SELECT SUM(salary) FROM employee;

img

工资总和

三、标量函数

SQL 算术函数:

SQL 算术函数执行数学运算,并从数值返回单个值。它是一种 SQL 标量函数。

算术函数可接受的数据类型有:小数、整数、浮点数、实数。

ROUND() 函数

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()函数

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() 函数

power 函数用于将一个数字的值返回到另一个数字。这两个数字都作为参数传递。

语法 —

SELECT POWER(base, exponenet);

例如,如果我获得 2 的 5 次幂。

SELECT POWER(2, 5);

输出 —32

其他语法差不多的算术函数有 -

MOD() — 返回 A 除以 B 后剩余的余数。

SQRT() — 返回数字的平方根。

EXP() — 返回对给定参数提出的 e。e 的值约为 2.718。

你可能感兴趣的:(数据库,sql,数据库,mysql)