10. MySQL常用函数
1. 字符串函数⚓
1.1 CONCAT(str1,str2,...)⚓
连接成一个字符串。有NULL时为NULL
。
MariaDB [blog]> SELECT CONCAT('A', 'B'), CONCAT('C', NULL);
+------------------+-------------------+
| CONCAT('A', 'B') | CONCAT('C', NULL) |
+------------------+-------------------+
| AB | NULL |
+------------------+-------------------+
1.2 INSERT(str,x,y,instr)⚓
将字符串 str 从第 x 位置开始,y 个字符长的子串替换为字符串 instr。
MariaDB [blog]> SELECT INSERT('ABCD',2,1,'Z');
+------------------------+
| INSERT('ABCD',2,1,'Z') |
+------------------------+
| AZCD |
+------------------------+
1.3 LTRIM(str)、RTRIM(str)和TRIM(str)⚓
去除空格的函数。
1.4 REPEAT(str,x)⚓
字符串重复函数。
1.5 STRCMP(s1,s2)⚓
字符串比较函数。大小写不敏感
- s1<s2,return -1
- s1=s2,return 0
- s1>s2,return 1
MariaDB [blog]> SELECT STRCMP('A', 'a'), STRCMP('ABC', 'ACB');
+------------------+----------------------+
| STRCMP('A', 'a') | STRCMP('ABC', 'ACB') |
+------------------+----------------------+
| 0 | -1 |
+------------------+----------------------+
2. 数值函数⚓
2.1 ABS(x)⚓
绝对值
2.2 CEIL(x)⚓
向上取整
2.3 FLOOR(x)⚓
向下取整
2.4 RAND()⚓
返回 0 到 1 内的随机值
2.5 ROUND(x,y)⚓
返回参数 x 的四舍五入的有 y 位小数的值
2.6 TRUNCATE(x,y)⚓
返回数字 x 截断为 y 位小数的结果,与ROUND不同之处在于不会四舍五入。
3. 日期和时间函数⚓
3.1 CURDATE()⚓
与CURRENT_DATE
、CURRENT_DATE()
是同义词。
CURTIME
同理。
3.2 NOW()⚓
和CURRENT_TIMESTAMP
、CURRENT_TIMESTAMP()
是同义词。
3.3 DATE_FORMAT(date,fmt)⚓
格式化返回日期。
常用格式:
格式符 | 说明 |
---|---|
%a |
Abbreviated weekday name (Sun ..Sat ) |
%Y |
Year, numeric, four digits |
%b |
Abbreviated month name (Jan ..Dec ) |
%m |
Month, numeric (00 ..12 ) |
%d |
Day of the month, numeric (00 ..31 ) |
%H |
Hour (00 ..23 ) |
%h ,%I |
Hour (01 ..12 ) |
%i |
Minutes, numeric (00 ..59 ) |
%S ,%s |
Seconds (00 ..59 ) |
%r |
Time, 12-hour (hh:mm:ss followed by AM or PM ) |
%T |
Time, 24-hour (hh:mm:ss) |
MariaDB [blog]> SELECT DATE_FORMAT(CURDATE(), '%Y-%m-%d');
+------------------------------------+
| DATE_FORMAT(CURDATE(), '%Y-%m-%d') |
+------------------------------------+
| 2019-05-08 |
+------------------------------------+
3.4 DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)⚓
日期加减函数。
- expr:表达式
- unit:单位
mysql> SELECT DATE_ADD('2010-12-31 23:59:59',
-> INTERVAL 1 DAY);
-> '2011-01-01 23:59:59'
mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
-> '2101-01-01 00:01:00'
mysql> SELECT DATE_SUB('2005-01-01 00:00:00',
-> INTERVAL '1 1:1:1' DAY_SECOND);
-> '2004-12-30 22:58:59'
mysql> SELECT DATE_ADD('1900-01-01 00:00:00',
-> INTERVAL '-1 10' DAY_HOUR);
-> '1899-12-30 14:00:00'
3.5 DATEDIFF(expr1,expr2)⚓
计算天数差。
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
-> -31
4. 流程函数⚓
函数 | 说明 |
---|---|
IF(value, t, f) | 如果 value 是真,返回 t;否则返回 f |
IFNULL(value1,value2) | 如果 value1 不为空返回 value1,否则返回 value2 |
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE default] END | 如果 value等于 compare_value,返回 result,否则返回 default |
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE default] END | 如果condition 是真,返回 result,否则返回 default |
SELECT IF(createDate>'2019-04-08', 'true', 'false') FROM new_user;
SELECT IFNULL(introduction, 'empty') FROM new_user;
SELECT (CASE createDate WHEN '2019-04-08' THEN 'TRUE' ELSE 'FALSE' END) diffDate FROM new_user;
SELECT (CASE WHEN '2019-04-08'>createDate THEN 'TRUE' ELSE 'FALSE' END) diffDate FROM new_user;