MySQL SQL函数
SQL查询排序:递减desc
、递增ASC
mysql> select * from test_table order by id DESC; -- 根据id进行递减
===================================================
MySQL 数值函数
1、CEILING(num)
- 返回最小的整数,使这个整数大于或等于指定数的数值运算(向上取整)。
2、FLOOR(num)
- 返回最大整数,使这个整数小于或等于指定数的数值运算(向下取整)。
3、ROUND(num)
- 四舍五入一个正数或者负数,结果为一定长度的值(四舍五入)。
===================================================
MySQL 填充字符 函数
1、Lpad(str,len,padstr)
函数,-LPAD(要查询的字段,长度,用来填充的字符),左填充
2、Rpad(str,len,padstr)
函数,-右填充
===================================================
MySQL中CONCAT()、CONCAT_WS()和GROUP_CONCAT()函数的区别和使用:
1、CONCAT(str1,str2,…)
- 将多个字符串连接成一个字符串,例:
mysql>select CONCAT('张三','到黄山','旅游')
result> 张三到黄山旅游
2、CONCAT_WS(separator,str1,str2,...)
- 将多个字符串通过separator(分隔符)连接成一个新字符串。
mysql>select CONCAT_WS('-','张三','到黄山',NULL,'旅游') --NULL不会被连接
result> 张三-到黄山-旅游
3、GROUP_CONCAT( [distinct] 要连接的字段名 [order by 排序字段 asc/desc ] [separator '分隔符'] )
- 将一个字段下的所有字符通过分隔符连接成新的字符串(分隔符默认为逗号)
mysql>select group_concat(price) from emp; --默认以(英文的)逗号分隔
--或
mysql>select id,group_concat(DISTINCT price ORDER BY price DESC) from goods GRROUP BY id;
4、一个有用的小方法:时间转换(毫秒转换为时分秒格式)
-- time_table(id, duration) duration为一个毫秒数值
select
CONCAT(
LPAD(FLOOR((SUM(duration)/1000) / 3600), 2, '0'), ':',
LPAD(FLOOR(((SUM(duration)/1000) % 3600) / 60), 2, '0'), ':',
LPAD((SUM(duration)/1000) % 60, 2, '0')
) AS TIME -- duration为毫秒,转换成时分秒格式
FROM time_table
===================================================
MySQL 时间处理
1、DATE_FORMAT(date_time, 'yyyy-MM-dd')
将时间date_time转换为'yyyy-MM-dd'格式
2、from_unixtime(unix_timestamp(), "yyyy-MM-dd HH:mm:ss")
获取当前时间
===================================================
coalesce()函数
1、COALESCE(value1,value2,...);
--例如表:test_table(id, ant, bnt, other)
mysql>select coalesce(ant, bnt, 1) from test_table where id=1; -- 获取[ant,bnt,1]里第一个不为 NULL 的 参数值
===================================================
MySQL 语法句子 case when then end
1、
case when 条件 then 满足条件的值 end -- 没有else的话,默认为 else Null
2、
case when 条件 then 满足条件的值 else 不满足条件的值 end
3、
case 参数
when 参数条件 then 满足条件的值
when 参数条件 then 满足条件的值
else 不满足条件的值 end
-- case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略
select
case sex
when '1' then '男'
when '2' then '女'
else '其他' end
from user
===================================================
MySQL 窗口函数
1、ROW_NUMBER()
- 从1开始,依次递增,为每条分组记录返回一个数字。
mysql>select ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) as row_num from test_table;
-- 根据COLUMN1进行分组,按COLUMN2进行排序(默认递增),每一组 通过ROW_NUMBER()生成一个序号数值,依次递增。
2、RANK()
按排序字段为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY
的排序,如果有相同的值会生成相同的序号。
mysql>select RANK() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) from test_table;
-- 根据COLUMN1进行分组,按COLUMN2进行排序(默认递增),每一组 通过RANK()生成一个序号数值,若相同组内COLUMN2值相同,则生成的序号相同。
3、PARTITION BY
主要应用在OVER(PARTITION BY COLUMN1)
语句中,表示对COLUMN1进行分组(类似于group by)
========================================
SQL中的取整函数FLOOR
、ROUND
、CEIL
、TRUNC
、SIGN
1 trunc(value,precision)按精度(precision)截取某个数字,不进行舍入操作。
2 round(value,precision)根据给定的精度(precision)输入数值。
3 ceil (value) 产生大于或等于指定值(value)的最小整数。
4 floor(value)与 ceil()相反,产生小于或等于指定值(value)的最小整数。
5 sign(value) 与绝对值函数ABS()相反。ABS()给出的是值的量而不是其符号,sign(value)则给出值的符号而不是量。
RAND()
函数用于显示位于0和1之间的随机值,但并不返回确切的1 (返回一随机数值的范围在0至RAND_MAX 间)
SELECT RAND(); -- 随机生成一个[0, 1) 之间的数
SELECT RAND()*(10-5)+5 AS num; -- 随机生成一个[5, 10) 之间的数
SELECT FLOOR(RAND()*(10-5+1)+5) AS num; -- 随机生成一个[5, 10] 之间的数
SELECT * FROM products ORDER BY RAND() LIMIT 10; -- 从products表中随机获取10条数据(随机获取10个product)
ROUND
函数用于把数值字段四舍五入为 指定的小数位数。
mysql> SELECT ROUND(1.298, 1); -- 1.3
mysql> SELECT ROUND(1.298, 0); -- 1
SELECT ROUND(RAND() * (SELECT MAX(id) FROM `theme_reco`.`hot_content`)) AS id # 随机生成 [0, max_id) 之间的随机整数
====================