单行函数
- 单行函数定义
- 字符串函数
- 日期、时间
- 数值函数
- 条件判断函数
单行函数定义
- 操作数据对象
- 接受参数返回一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以嵌套
- 参数可以是一列或者一个值
字符串函数
- 大小写转换
SELECT UPPER('yerennuo'),UCASE('hello'),
LOWER('YRENNUO'),LCASE('HELLO');
2. 字符串连接
SELECT CONCAT('yerennuo ',' is',' a',' student');
SELECT CONCAT(ename,' 的入职日期是 ',hiredate) FROM emp;
- 字符串替换
SELECT REPLACE('yerennuo','nuo','诺'),
INSERT('yerennuo',1,2,'野');
- 长度
SELECT
LENGTH( 'yerennuo' ),
LENGTH( '野人诺' ),
CHAR_LENGTH('yerennuo'),
CHAR_LENGTH('野人诺');
- 字符串截取
SELECT
SUBSTR( 'hello world', 2, 5 ),
SUBSTR('hello world' FROM 3),
SUBSTR('hello world',4);
SELECT LEFT('hello',3),RIGHT('hello',3),MID('hello',2,3);
- ASCII(str)
SELECT ASCII('a'),CHAR(65);
- 填充 RPAD(str,len,padstr)
SELECT
RPAD( 'yerennuo', 10, '☆' ),
LPAD( 'yerennuo', 10, '★' ),
RPAD( 'yerennuo', 10, '★' );
- 修剪 LTRIM(str) 去除左空格
SELECT
LTRIM( ' I\'m yerennuo ' ),
RTRIM( ' I\'m yerennuo ' ),
TRIM(' I\'m yerennuo ');
SELECT
TRIM(BOTH'-' FROM '-2024-01-30-');
- 查找
SELECT INSTR('thanks, yerennuo!','ank');
SELECT INSTR('thanks, yerennuo!','anki');
SELECT LOCATE('a','thanks, yerennuo!');
SELECT LOCATE('a','thanks, yerennuo!',4);
SELECT POSITION('a' in 'thanks, yerennuo!');
- 其他
SELECT REPEAT(5,10);
SELECT SPACE(3);
SELECT CONCAT(ename,SPACE(5),hiredate)FROM emp;
SELECT STRCMP('abc','def');
SELECT ELT(2,'张三','李四','王五');
SELECT FIELD('张三','张三','李四','王五');
SELECT FIND_IN_SET('李四','张三,李四,王五');
SELECT
CONCAT(
UPPER(
LEFT ( ename, 1 )),
LOWER(
SUBSTR( ename, 2 ))) AS 姓名
FROM
emp;
SELECT * FROM emp
WHERE CHAR_LENGTH(ename) = 5;
日期、时间
- 获取
SELECT CURRENT_DATE(),CURRENT_DATE,CURDATE(),
CURTIME(),CURRENT_TIME(),CURRENT_TIME,
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),
SYSDATE()
- utc时间
SELECT UTC_DATE(),UTC_TIME();
- 时间转换
SELECT UNIX_TIMESTAMP(),
UNIX_TIMESTAMP('2024/01/31'),
FROM_UNIXTIME(1706630400);
- 从日期中提取想要的信息
SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())
SELECT MONTHNAME(NOW());
SELECT MONTHNAME(NOW()),
DAYNAME(NOW()),
WEEKDAY(NOW())+1,
QUARTER(NOW()),
WEEK(NOW())+1,WEEKOFYEAR(NOW());
SELECT EXTRACT(SECOND FROM CURRENT_TIME),
EXTRACT(SECOND_MICROSECOND FROM CURRENT_TIME)
- 时间日期计算
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY),
ADDDATE(NOW(),INTERVAL 1 YEAR),
DATE_ADD(NOW(),INTERVAL '1,2' YEAR_MONTH);
SELECT NOW(),ADDTIME(NOW(),10000);
SELECT DATEDIFF(NOW(),'2024-1-29'),
TIMEDIFF(CURRENT_TIME,'16:26:33');
SELECT TO_DAYS(NOW()) ,
FROM_DAYS(739281);
SELECT PERIOD_ADD(201702,50);
SELECT MAKEDATE(2024,365);
- 格式化与解析
SELECT DATE_FORMAT(NOW(),'日期%y/%m/%d时间%h:%i:%s');
格式符 |
说明 |
格式符 |
说明 |
%Y |
四位数字表示年份 |
%y |
两位数字表示年份 |
%M |
月名表示月份(January…) |
%m |
两位数字表示月份(01,02,03…) |
%b |
缩写的月名(Jan.) |
%c |
数字表示月份 |
%D |
英文后缀表示月中的天数(1st,2nd…) |
%d |
两位数字表示月中天数(01,02,03…) |
%e |
数字形式表示月中的天数(1,2,3…) |
|
|
%H |
两位数字表示小时,24小时制(01,02,…) |
%h |
两位数字表示小时,12小时制(01,02,03…) |
%k |
数字形式小时,24小时制(1,2,3…) |
%l |
数字表示小时,12小时制(1,2,3…) |
%i |
两位数字表示分钟(00,01,02) |
%S和%s |
两位数字表示秒(00,01,02…) |
%W |
一周中的星期名称(Sunday,…) |
%a |
一周中星期的缩写(Sun,Mon…) |
%w |
以数字表示周中的天数(0=Sunday,1=Monday,…) |
|
|
%j |
以3位数字表示年中的天数(001,002,…) |
|
|
%u |
以数字表示月中的第几周,Monday是周中第一天 |
%U |
以数字表示年中的第几周,(1,2,3…)Sunday是周中的第一天 |
%T |
24小时制 |
%r |
12小时制 |
%p |
AM或PM |
%% |
表示% |
SELECT *FROM emp
WHERE DATE_FORMAT(hiredate,'%Y-%m')> '1981-06';
- 获取格式
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
SELECT GET_FORMAT(DATE, 'INTERNAL'),
GET_FORMAT(DATE,'USA');
- 按照格式把字符串解析为日期
STR_TO_DATE(str,format)
SELECT STR_TO_DATE('2024,1-31','%Y,%m-%d');
数值函数
SELECT ROUND(251.55,1);
SELECT TRUNCATE(251.55,1);
SELECT CEIL(3.14),CEILING(3.14);
SELECT FLOOR(3.14);
SELECT RAND();
条件判断函数
- IF
SELECT IF(TRUE,'is true','is false');
SELECT IF(comm is NULL,0,comm) 奖金 FROM emp;
SELECT IFNULL(comm,0) 奖金 FROM emp;
- CASE
SELECT
CASE
521
WHEN 1 THEN '1'
WHEN 520 THEN
'520' ELSE '521'
END ;
SELECT ename,DATE_FORMAT(hiredate,'%m') AS 'm',
CASE MONTH(hiredate)
WHEN 1 THEN '1月'
WHEN 2 THEN '2月'
WHEN 5 THEN '5月'
ELSE '其他月'
END AS 入职月份
FROM emp
ORDER BY m;