高级查询参看:
http://www.w3school.com.cn/sql/
http://www.cnblogs.com/kissdodog/p/4168721.html
-- ------------------ 字符串函数 -------------------
-- 大写转换 ucase(),upper()
SELECT UCASE(ename) FROM emp;
SELECT UPPER(ename) FROM emp;
-- 小写转换 lcase(),lower
SELECT LCASE(ename) FROM emp;
SELECT LOWER(ename) FROM emp;
-- 字符串拼接 concat()
SELECT CONCAT(ename,'.com') '域名' FROM emp;
-- MySQL 字符串截取函数:left(), right(), substring(), substring_index()。
-- 还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,
-- 截取 substr -- http://www.cnblogs.com/zdz8207/p/3765073.html
SELECT SUBSTR(ename,1,1) FROM emp;
SELECT SUBSTRING(ename,2) FROM emp;
-- 以首字母大写的方式显示所有员工姓名
SELECT CONCAT(UPPER(SUBSTR(ename,1,1)),LOWER(SUBSTR(ename,2))) AS '员工姓名' FROM emp;
-- 以首字母小写的方式,其他字母大写的方式显示员工信息
SELECT CONCAT(LCASE(SUBSTR(ename,1,1)),UCASE(SUBSTR(ename,2))) AS '员工姓名' FROM emp;
-- ---------------------- 数学函数 ------------------------------
-- round() 函数用于把数值字段四舍五入为指定的小数位数。
SELECT ROUND(19.3445,2); -- 19.34
SELECT ROUND(19.3495,2); -- 19.35
-- mod() 函数用于求模值
SELECT MOD(2,3); -- 2%3 = 2
-- SQRT(x) 返回x的平方根
SELECT SQRT(25); -- 5
-- ceil() 向上取整
SELECT CEIL(2.3); -- 3
-- FLOOR(x) 向下取整
SELECT FLOOR(2.9) -- 2
-- ABS(x)返回x的绝对值
SELECT ABS(-1) -- 返回1
-- RAND()返回0->1的随机数
SELECT RAND(); -- 0.93099315644334
-- RAND(x)返回0->1的随机数,x值相同时返回的随机数相同
SELECT RAND(2); -- 1.5865798029924
-- 显示在一个月30天的情况下所有员工的日薪
SELECT ename,sal ,hiredate FROM emp WHERE DAY(LAST_DAY(hiredate) )= '30'
-- select hiredate,day(Last_day(hiredate)) from emp
-- ---------------------- 时间函数 -----------------------
-- CURDATE(),CURRENT_DATE() 返回当前日期
SELECT CURDATE(); -- 2017-09-28
SELECT CURRENT_DATE();
-- NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP()
-- 返回当前日期和时间
SELECT NOW(); -- 2017-09-28 18:58:50
SELECT SYSDATE();
-- YEAR() 返回年
SELECT YEAR(NOW()); -- 2017
-- MONTH() 返回月
SELECT MONTH(NOW()); -- 9
-- DAY() 返回日
SELECT DAY(NOW()) -- 28
-- DATEDIFF() 返回两个日期之间的天数
SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate -- 1
-- ADDDATE(d,n) 计算其实日期d加上n天的日期
SELECT ADDDATE(NOW(),1); -- 2017-09-29 19:13:47 今天是 2017-09-28 19:13:47
-- LAST_DAY() 获得本月的最后一天
SELECT LAST_DAY(NOW()); -- 2017-09-30
-- WEEKDAY()当周第几天
SELECT WEEKDAY(NOW()) -- 3 今天天周四,第一天为 0
-- DAYOFMONTH()当月 第几天
SELECT DAYOFMONTH(NOW()); -- 28
-- SUBDATE(d,INTERVAL expr type)日期d减去一个时间段后的日期
SELECT SUBDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE) -- 2011-11-11 11:06:11 (TYPE的取值与上面那个列出来的函数类似)
-- 时间格式化 -- http://www.w3school.com.cn/sql/func_date_format.asp
SELECT DATE_FORMAT(NOW(),'%Y 年 %m月 %d日 %H时 %i分 %s秒');
-- ADDDATE(d,INTERVAL expr type 计算起始日期d加上一个时间段后的日期
SELECT ADDDATE('2011-11-11 11:11:11',1) -- 2011-11-12 11:11:11 (默认是天)
SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE); -- 加五分钟
-- 返回入职8个月的员工信息
SELECT * FROM emp WHERE ADDDATE(hiredate, INTERVAL 8 MONTH) = NOW();
-- 找出各月倒数第三天受雇的所有员工
SELECT ename,hiredate FROM emp WHERE DAY(hiredate) = DAY(LAST_DAY(hiredate) - 2);
-- 显示员工入职天数
SELECT ename,DATEDIFF(NOW(),hiredate) '入职天数' FROM emp;
-- 显示服务满10年的员工姓名和雇佣天数
SELECT ename,DATEDIFF(NOW(),hiredate) '雇佣天数' FROM emp WHERE NOW() > ADDDATE(hiredate,INTERVAL 10 YEAR);
-- 得到当周/当月/当年第一天,最后一天
SELECT SUBDATE(NOW(),INTERVAL WEEKDAY(NOW()) DAY) -- 当周第一天
SELECT SUBDATE(NOW(),INTERVAL DAYOFMONTH(NOW())-1 DAY) -- 当月第一天
SELECT SUBDATE(NOW(),INTERVAL DAYOFYEAR(NOW()) -1 DAY) -- 当年第一天
SELECT ADDDATE(NOW(),INTERVAL 6-WEEKDAY(NOW()) DAY); -- 当周最后一天
SELECT LAST_DAY(NOW());-- 当月最后一天
SELECT ADDDATE(SUBDATE(NOW(),INTERVAL DAYOFYEAR(NOW()) DAY),INTERVAL 1 YEAR ) '当年最后一天'-- 当年最后一天
-- ----------------------转换函数-----------------------------------------------
-- TO_DAYS(d) 计算日期d距离0000年1月1日的天数
SELECT TO_DAYS(NOW());
-- STR_TO_DATE(d,'format'); 字符串转时间
SELECT STR_TO_DATE(hiredate,'%Y-%m-%d %H:%i:%s') FROM emp;
-- 显示1980年入职的员工
SELECT * FROM emp WHERE YEAR(hiredate) = 1980;
-- 显示所有12月份入职的员工
SELECT * FROM emp WHERE MONTH(hiredate) = 12;
-- ----------------------------- 加密-------------------------------
SELECT MD5(deptno) FROM emp;