MYSQL函数

1、字符串函数

-- CHARSET(str) 返回字串字符集 
SELECT CHARSET(ename) FROM emp; 
-- CONCAT (string2 [,... ]) 连接字串, 将多个列拼接成一列 
SELECT CONCAT(ename, ' 工作是 ', job) FROM emp; 
-- INSTR (string ,substring ) 返回 substring 在 string 中出现的位置,没有返回 0 
-- dual 亚元表, 系统表 可以作为测试表使用 
SELECT INSTR('aabbccc', 'bb') FROM DUAL; 
-- UCASE (string2 ) 转换成大写
SELECT UCASE(ename) FROM emp;
-- LCASE (string2 ) 转换成小写 
SELECT LCASE(ename) FROM emp; 
-- LEFT (string2 ,length )从 string2 中的左边起取 length 个字符 
-- RIGHT (string2 ,length ) 从 string2 中的右边起取 length 个字符 
SELECT LEFT(ename, 2) FROM emp; 
-- LENGTH (string )string 长度[按照字节] 
SELECT LENGTH(ename) FROM emp; 
-- REPLACE (str ,search_str ,replace_str ) 
-- 在 str 中用 replace_str 替换 search_str 
-- 如果是 manager 就替换成 经理 SELECT ename, 
SELECT REPLACE(job,'MANAGER', '经理') FROM emp;
-- STRCMP (string1 ,string2 ) 逐字符比较两字串大小 
SELECT STRCMP('xsz', 'aaaaaa') FROM DUAL; 
-- SUBSTRING (str , position [,length ]) 
-- 从 str 的 position 开始【从 1 开始计算】,取 length 个字符 
-- 从 ename 列的第一个位置开始取出 2 个字符 
SELECT SUBSTRING(ename, 1, 2) FROM emp; 
-- LTRIM (string2 ) RTRIM (string2 ) TRIM(string) 
-- 去除前端空格或后端空格 
SELECT LTRIM('  天气真好  ') FROM DUAL; 
SELECT RTRIM('天气真好 ') FROM DUAL; 
SELECT TRIM(' 天气真好 ') FROM DUAL;

2、数学函数

-- ABS(num) 绝对值 
SELECT ABS(-10) FROM DUAL; 
-- BIN (decimal_number )十进制转二进制 
SELECT BIN(10) FROM DUAL; 
-- CEILING (number2 ) 向上取整, 得到比 num2 大的最小整数 
SELECT CEILING(-1.1) FROM DUAL; 
-- CONV(number2,from_base,to_base) 进制转换 
-- 下面的含义是 8 是十进制的 8, 转成 2 进制输出 
SELECT CONV(8, 10, 2) FROM DUAL; 
-- FLOOR (number2 ) 向下取整,得到比 num2 小的最大整数 
SELECT FLOOR(-1.1) FROM DUAL; 
-- FORMAT (number,decimal_places ) 保留小数位数(四舍五入) 
SELECT FORMAT(78.125458,2) FROM DUAL; 
-- HEX (DecimalNumber ) 转十六进制 
-- LEAST (number , number2 [,..]) 求最小值 
SELECT LEAST(0,1, -10, 4) FROM DUAL; 
-- MOD (numerator ,denominator ) 求余 
SELECT MOD(10, 3) FROM DUAL; 
-- RAND([seed]) RAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0 
-- 1. 如果使用 rand() 每次返回不同的随机数 ,在 0 ≤ v ≤ 1.0 
-- 2. 如果使用 rand(seed) 返回随机数, 范围 0 ≤ v ≤ 1.0, 如果 seed 不变,
-- 该随机数也不变了
SELECT RAND() FROM DUAL; 

3、日期函数

-- 日期时间相关函数 
-- CURRENT_DATE ( ) 当前日期 
SELECT CURRENT_DATE() FROM DUAL; 
-- CURRENT_TIME ( )当前时间 
SELECT CURRENT_TIME() FROM DUAL; 
-- CURRENT_TIMESTAMP ( ) 当前时间戳 
SELECT CURRENT_TIMESTAMP() FROM DUAL; 
SELECT NOW() FROM DUAL; 
-- 创建测试表 信息表 
CREATE TABLE mes ( id INT, content VARCHAR ( 30 ), send_time DATETIME );
-- 添加一条记录 
INSERT INTO mes VALUES(1, '北京新闻', CURRENT_TIMESTAMP()); 
INSERT INTO mes VALUES(2, '上海新闻', NOW()); 
INSERT INTO mes VALUES(3, '广州新闻', NOW()); 
SELECT * FROM mes; 
-- 上应用实例 
-- 显示所有新闻信息,发布日期只显示 日期,不用显示时间. 
SELECT id, content, DATE(send_time) FROM mes; 
-- 请查询在 10 分钟内发布的新闻, 思路一定要梳理一下. 
SELECT * FROM mes WHERE send_time >= DATE_SUB(NOW(),INTERVAL 10 MINUTE)
-- 请在 mysql 的 sql 语句中求出 2011-11-11 和 1990-1-1 相差多少天 
SELECT DATEDIFF('2011-11-11', '1990-01-01') FROM DUAL; 
-- 请用 mysql 的 sql 语句求出你活了多少天? [练习] 1986-11-11 出生 
SELECT DATEDIFF(NOW(), '1949-10-1') FROM DUAL; 
-- 如果你能活 80 岁,求出你还能活多少天.[练习] 1986-11-11 出生 
-- 先求出活 80 岁 时, 是什么日期 X 
-- 然后在使用 datediff(x, now()); 1986-11-11->datetime 
-- INTERVAL 80 YEAR : YEAR 可以是 年月日,时分秒 -- '1986-11-11' 可以 date,datetime timestamp 
SELECT DATEDIFF(DATE_ADD('1986-11-11', INTERVAL 80 YEAR), NOW()) FROM DUAL; SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL; 
-- YEAR|Month|DAY| DATE (datetime ) 
SELECT YEAR(NOW()) FROM DUAL; 
SELECT MONTH(NOW()) FROM DUAL; 
SELECT DAY(NOW()) FROM DUAL; 
SELECT MONTH('2013-11-10') FROM DUAL; 
-- unix_timestamp() : 返回的是 1970-1-1 到现在的秒数 
SELECT UNIX_TIMESTAMP() FROM DUAL; 
-- FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期 -- %Y-%m-%d 格式是规定好的,表示年月日 -- 意义:在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换 
SELECT FROM_UNIXTIME(1618483484, '%Y-%m-%d') FROM DUAL; 
SELECT FROM_UNIXTIME(1618483100, '%Y-%m-%d %H:%i:%s') FROM DUAL; SELECT * FROM mysql.user

4、流程控制语句

# 流程控制语句 
# IF(expr1,expr2,expr3) 如果 expr1 为 True ,则返回 expr2 否则返回 expr3 
SELECT IF(TRUE, '北京', '上海') FROM DUAL; 
# IFNULL(expr1,expr2) 如果 expr1 不为空 NULL,则返回 expr1,否则返回 expr2 
SELECT IFNULL( NULL, '天气真好') FROM DUAL;
# SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.] 
# 如果 expr1 为 TRUE,则返回 expr2,如果 expr2 为 t, 返回 expr4, 否则返回 expr5 
SELECT CASE WHEN TRUE THEN 'jack'  WHEN FALSE THEN 'tom' ELSE 'mary' END

5、查询语句

-- ■ 如何使用 like 操作符(模糊) 
-- %: 表示 0 到多个任意字符 _: 表示单个任意字符 
-- ?如何显示首字符为 S 的员工姓名和工资 
SELECT ename, sal FROM emp WHERE ename LIKE 'S%' 
-- ?如何显示第三个字符为大写 O 的所有员工的姓名和工资 
SELECT ename, sal FROM emp WHERE ename LIKE '__O%' 
-- ■ 如何显示没有上级的雇员的情况 
SELECT * FROM emp WHERE mgr IS NULL; 
-- ■ 查询表结构 DESC emp -- 使用 order by 子句 
-- ?如何按照工资的从低到高的顺序[升序],显示雇员的信息 
SELECT * FROM emp ORDER BY sal 
-- ?按照部门号升序而雇员的工资降序排列 , 显示雇员信息 
SELECT * FROM emp ORDER BY deptno ASC , sal DESC; 2
-- 分页查询 
-- 按雇员的 id 号升序取出, 每页显示 3 条记录,请分别显示 第 1 页,第 2 页,第 3 页 
-- 第 1 页 
SELECT * FROM emp ORDER BY empno LIMIT 0, 3; 
-- 第 2 页 
SELECT * FROM emp ORDER BY empno LIMIT 3, 3; 
-- 第 3 页 
SELECT * FROM emp ORDER BY empno LIMIT 6, 3; 
-- 推导一个公式 
SELECT * FROM emp ORDER BY empno LIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数
--先分组在排序最后分页

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值