Skip to content

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_DATECURRENT_DATE()是同义词。

CURTIME同理。

3.2 NOW()

CURRENT_TIMESTAMPCURRENT_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;