时间,日期相关函数参考:https://www.cnblogs.com/Xinenhui/p/16348570.html
一、 基本函数
1.1 count()
统计数据表中包含的记录行的总数
语法:
SELECT COUNT(*) FROM t1; SELECT COUNT(字段名) FROM t1;
用法:
- count(*) 统计表中的总行数,无论某列有值或者空值,包含null
- count(1) 对表中第一列的值的行数进行计算,忽略null列
- count(字段) 计算指定列的总行数,忽略null
- count(distinct 字段) 计算指定列不重复数值的总行数,即去重
对统计结果进行排序(聚合后的值是无序的):
select count(num) from t1 group by num order by count(num) desc;
select count(num) as 'test' from t1 group by num order by test desc;
二、判断函数
2.1 case()
case()是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个,分为简单函数与搜索函数,都可以实现相同的功能,但简单函数在功能方面没有搜索函数全面,比如写判断式。
2.1.1 简单函数
CASE <表达式> WHEN <值1> THEN <操作> WHEN <值2> THEN <操作> ... ELSE <操作> END
将 <表达式> 的值 逐一和 每个 when 跟的 <值> 进行比较
如果跟某个<值>想等,则执行它后面的 <操作> ,如果所有 when 的值都不匹配,则执行 else 的操作
如果 when 的值都不匹配,且没写 else,则会报错
2.1.2 搜索函数
CASE WHEN <条件1> THEN <命令> WHEN <条件2> THEN <命令> ... ELSE commands END
每个 <条件> 都是独立的,可以用 and 来连接多个查询条件
不同 <条件> 是互不关联且互不影响的
2.1.3 示例
#查询monitor_item_name字段的告警类型并赋值 select *,case monitor_item_name when '容器磁盘使用率告警' then 1 when '中间件' then 2 else 3 end from test;
#根据表达式进行判断并赋值 select *,case when monitor_item_name = '容器磁盘使用率告警' then 1 when monitor_item_name = '中间件' or monitor_item_name = 'RDS云监控' then 2 else 3 end from test;
2.2 if()
IF()函数在条件为TRUE时返回一个值,如果条件为FALSE则返回另一个值
语法:
IF(condition, value_if_true, value_if_false)
- condition:判断条件
- value_if_true:如果condition的结果为TRUE,返回该值
- value_if_false:如果condition的结果为FALSE,返回该值
示例:
if(monitor_item_name = '容器磁盘使用率告警', 1, 0) as 磁盘, if(alarm_source_cn = '中间件' or alarm_source_cn = 'RDS云监控',1,0) as 中间件
三、字符串函数
3.1 substring_index()
按关键字截取字符串
语法:
substring_index(input,delim,count)
- input:要截取的字符或字段
- delim:分隔符
- count:计数,若为正数,则从左往右数,截取第N个分隔符左边的全部数据;若为负数,则从右往左数,截取第N个分隔符右边的全部数据
例:
test=www.nginx.com substring_index(test,'.'1) => www substring_index(test,'.'-1) => com substring_index(substring_index(test,'.'2),'.'1) => nginx
3.2 concat()
字符串拼接函数,可连接多段
mysql> select concat(psa_id,'%') from ops_psas limit 1; +--------------------+ | concat(psa_id,'%') | +--------------------+ | 35360% | +--------------------+ 1 row in set (0.00 sec) mysql> select concat(psa_id,'%','w') from ops_psas limit 1; +------------------------+ | concat(psa_id,'%','w') | +------------------------+ | 35360%w | +------------------------+ 1 row in set (0.00 sec) mysql>
3.3 group_concat()
作用:将函数内的字段拼接起来,默认分隔符为,
语法:
separator:指定分隔符
distinct:去重
order by:排序
GROUP_CONCAT([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq])
示例:
mysql> select * from t1; +------+------+ | id | name | +------+------+ | 2 | jer | | 1 | tom | +------+------+ 2 rows in set (0.00 sec) mysql> select group_concat(id,name separator ';') from t1; +-------------------------------------+ | group_concat(id,name separator ';') | +-------------------------------------+ | 2jer;1tom | +-------------------------------------+ 1 row in set (0.00 sec) mysql> select group_concat(distinct id,name order by id separator ';') from t1; +----------------------------------------------------------+ | group_concat(distinct id,name order by id separator ';') | +----------------------------------------------------------+ | 1tom;2jer | +----------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
3.4 position()
返回字符串中第一次出现的子字符串的位置,如果在原始字符串中找不到子字符串,则此函数返回0,不区分大小写,且当任意一个参数为 NULL
时,函数将返回 NULL
语法: position(substring IN string)
- substring:必需项,要在字符串中搜索的子字符串
- string:必需项,要搜索的原始字符串
实例:
MySQL [sredev]> select position("he" in "Hello"); +---------------------------+ | position("he" in "Hello") | +---------------------------+ | 1 | +---------------------------+ 1 row in set (0.00 sec) MySQL [sredev]> select position("WO" in "Hello world"); +---------------------------------+ | position("WO" in "Hello world") | +---------------------------------+ | 7 | +---------------------------------+ 1 row in set (0.00 sec) MySQL [sredev]> select position(1 in "Hello world"); +------------------------------+ | position(1 in "Hello world") | +------------------------------+ | 0 | +------------------------------+ 1 row in set (0.00 sec) MySQL [sredev]> select position(null in "Hello world"); +---------------------------------+ | position(null in "Hello world") | +---------------------------------+ | NULL | +---------------------------------+ 1 row in set (0.00 sec) MySQL [sredev]>
也可以用在where条件里,类似于like
MySQL [sredev]> select * from alarm_lists where position('rec' in product)!=0 limit 1\G
四、数值函数
4.1 round()
数值保持小数点后几位
mysql> select round(12.343435,2); +--------------------+ | round(12.343435,2) | +--------------------+ | 12.34 | +--------------------+ 1 row in set (0.00 sec)
五、类型转换函数
5.1 cast()
将任何类型的值转换为具有指定类型的值,以便在WHERE,JOIN和HAVING子句中进行比
语法:
CAST(expression AS TYPE);
TYPE支持的类型:
- char(字符)
- date(日期)
- time(时间)
- datetime(日期时间)
- decimal(浮点型 float)
- signed(整数 int)
示例:
两数相除,结果类型转为浮点型,decimal(m,n),m表示精度,即小数点左右两边相加的位数;n表示小数位数,即保留多少为小数;m>=n
mysql> select cast(367132728 / 367132745 as decimal(13,12)); +-----------------------------------------------+ | cast(367132728 / 367132745 as decimal(13,12)) | +-----------------------------------------------+ | 0.999999953000 | +-----------------------------------------------+ 1 row in set (0.00 sec) mysql>
六、比较函数
6.1 greatest(),least()
作用:从给定参数中返回最大值或最小值(max()是纵向比较,而greatest()是横向比较)
语法:
GREATEST(value1, value2, ...); LEAST(value1,value2,...);
注:
- 如果任何参数为NULL,则两个函数都将立即返回NULL,而不进行任何比较,可用IFNULL函数将NULL视为零来执行数字比较
- 如果在INT或REAL上下文中使用函数,或者所有参数都是整数值或REAL值,那么它们将分别作为INT和REAL来比较
- 如果参数由数字和字符串组成,则函数将它们作为数字进行比较
- 如果至少一个参数是非二进制(字符)字符串,则函数将将参数作为非二进制字符串进行比较
- 在所有其他情况下,函数将参数作为二进制字符串进行比较
示例:
mysql> select greatest(20,6,45,788,32445); +-----------------------------+ | greatest(20,6,45,788,32445) | +-----------------------------+ | 32445 | +-----------------------------+ 1 row in set (0.00 sec) mysql> select greatest(20,6,45,788,32445,ifnull(null,0)); +--------------------------------------------+ | greatest(20,6,45,788,32445,ifnull(null,0)) | +--------------------------------------------+ | 32445 | +--------------------------------------------+ 1 row in set (0.00 sec) mysql>
标签:set,函数,--,0.00,Mysql,sec,mysql,select From: https://www.cnblogs.com/Xinenhui/p/16349464.html