跳转至

MySQL 函数

http://zetcode.com/databases/mysqltutorial/functions/

在 MySQL 教程的这一部分中,我们将介绍 MySQL 内置函数。

MySQL 内置函数可以分为几组。

  • 数学函数
  • 汇总函数
  • 字符串函数
  • 日期和时间函数
  • 系统函数

在这里,我们仅显示所有 MySQL 函数的一部分。 要获取可用函数的完整列表,请查阅 MySQL 参考手册。

数学函数

MySQL 支持多种数学函数。

mysql> SELECT RAND();
+-------------------+
| RAND()            |
+-------------------+
| 0.786536605829873 |
+-------------------+

RAND()函数从 0,1 间隔返回一个随机数。

mysql> SELECT ABS(-3), PI(), SIN(0.5);
+---------+----------+-------------------+
| ABS(-3) | PI()     | SIN(0.5)          |
+---------+----------+-------------------+
|       3 | 3.141593 | 0.479425538604203 |
+---------+----------+-------------------+

ABS()函数返回数字的绝对值。 PI()函数给出 PI 的值。 SIN()函数计算参数的正弦值。

mysql> SELECT BIN(22), OCT(22), HEX(22);
+---------+---------+---------+
| BIN(22) | OCT(22) | HEX(22) |
+---------+---------+---------+
| 10110   | 26      | 16      |
+---------+---------+---------+

我们使用函数给出十进制 22 的二进制,八进制和十六进制表示形式。

mysql> SELECT CEIL(11.256), FLOOR(11.256), ROUND(11.256, 2);
+--------------+---------------+------------------+
| CEIL(11.256) | FLOOR(11.256) | ROUND(11.256, 2) |
+--------------+---------------+------------------+
|           12 |            11 |            11.26 |
+--------------+---------------+------------------+

CEIL()函数将值舍入为最小的后续整数。 FLOOR()函数将值舍入为最大的前一个整数。 ROUND()返回一个四舍五入到指定小数位数的数字。

mysql> SELECT POW(3, 3), SQRT(9);
+-----------+---------+
| POW(3, 3) | SQRT(9) |
+-----------+---------+
|        27 |       3 |
+-----------+---------+

幂和平方根函数。

mysql> SELECT DEGREES(2*PI());
+-----------------+
| DEGREES(2*PI()) |
+-----------------+
|             360 |
+-----------------+

DEGREES()函数根据弧度计算度数。

汇总函数

集合函数对值集进行操作。

mysql> SELECT * FROM Cars;
+----+------------+--------+
| Id | Name       | Cost   |
+----+------------+--------+
|  1 | Audi       |  52642 |
|  2 | Mercedes   |  57127 |
|  3 | Skoda      |   9000 |
|  4 | Volvo      |  29000 |
|  5 | Bentley    | 350000 |
|  6 | Citroen    |  21000 |
|  7 | Hummer     |  41400 |
|  8 | Volkswagen |  21600 |
+----+------------+--------+

我们有汽车表。

mysql> SELECT MIN(Cost), MAX(Cost), AVG(Cost)
    -> FROM Cars;
+-----------+-----------+------------+
| MIN(Cost) | MAX(Cost) | AVG(Cost)  |
+-----------+-----------+------------+
|      9000 |    350000 | 72721.1250 |
+-----------+-----------+------------+

我们使用MIN()MAX()AVG()聚合函数来计算表中汽车的最低价格,最高价格和平均价格。

mysql> SELECT SUM(Cost), COUNT(Id), STD(Cost), 
    -> VARIANCE(Cost) FROM Cars;
+-----------+-----------+-------------+------------------+
| SUM(Cost) | COUNT(Id) | STD(Cost)   | VARIANCE(Cost)   |
+-----------+-----------+-------------+------------------+
|    581769 |         8 | 105931.1676 | 11221412265.3594 |
+-----------+-----------+-------------+------------------+

我们使用SUM()函数来获取Cost列中所有值的总和。 我们使用COUNT()函数计算表中的汽车数量。 最后,我们使用STD()VARIANCE()函数获得标准偏差和方差。

字符串函数

在这一组中,我们有各种与字符串相关的函数。

mysql> SELECT LENGTH('ZetCode'), UPPER('ZetCode'), LOWER('ZetCode');
+-------------------+------------------+------------------+
| LENGTH('ZetCode') | UPPER('ZetCode') | LOWER('ZetCode') |
+-------------------+------------------+------------------+
|                 7 | ZETCODE          | zetcode          |
+-------------------+------------------+------------------+

LENGTH()函数返回字符串的长度。 UPPER()函数将字符转换为大写字母。 LOWER()函数将字符转换为小写字母。

ysql> SELECT LPAD(RPAD("ZetCode", 10, "*"), 13, "*");
+-----------------------------------------+
| LPAD(RPAD("ZetCode", 10, "*"), 13, "*") |
+-----------------------------------------+
| ***ZetCode***                           |
+-----------------------------------------+

我们使用LPAD()RPAD()函数将字符附加和添加到指定的字符串之前。 "ZetCode"字符串包含 7 个字符。 RPAD()函数将 3 个"*"字符附加到字符串中,该字符现在将为 10 个字符长。

mysql> SELECT REVERSE('ZetCode'), REPEAT('*', 6);
+--------------------+----------------+
| REVERSE('ZetCode') | REPEAT('*', 6) |
+--------------------+----------------+
| edoCteZ            | ******         |
+--------------------+----------------+

REVERSE()函数可反转字符串中的字符。 REPEAT()函数重复指定次数的字符串。

mysql> SELECT LEFT('ZetCode', 3), RIGHT('ZetCode', 3), 
    -> SUBSTRING('ZetCode', 3, 3);
+--------------------+---------------------+----------------------------+
| LEFT('ZetCode', 3) | RIGHT('ZetCode', 3) | SUBSTRING('ZetCode', 3, 3) |
+--------------------+---------------------+----------------------------+
| Zet                | ode                 | tCo                        |
+--------------------+---------------------+----------------------------+

LEFT()函数返回最左边的 3 个字符,RIGHT()函数返回最右边的 3 个字符。 SUBSTRING()函数从字符串的第三位置返回三个字符。

mysql> SELECT STRCMP('byte', 'byte'), CONCAT('three', ' apples');
+------------------------+----------------------------+
| STRCMP('byte', 'byte') | CONCAT('three', ' apples') |
+------------------------+----------------------------+
|                      0 | three apples               |
+------------------------+----------------------------+

STRCMP()比较两个字符串,如果相同则返回 0。 CONCAT()函数连接两个字符串。

mysql> SELECT REPLACE('basketball', 'basket', 'foot');
+-----------------------------------------+
| REPLACE('basketball', 'basket', 'foot') |
+-----------------------------------------+
| football                                |
+-----------------------------------------+

REPLACE()函数返回一个字符串,其中我们替换了一些文本。 第一个参数是原始字符串。 第二个参数是一个字符串,我们要替换。 最后一个参数是新的替换字符串。

日期&时间函数

在这个组中,我们具有各种日期和时间函数。

mysql> SELECT DAYNAME('2011-01-23'), YEAR('2011/01/23'),
    -> MONTHNAME('110123');
+-----------------------+--------------------+---------------------+
| DAYNAME('2011-01-23') | YEAR('2011/01/23') | MONTHNAME('110123') |
+-----------------------+--------------------+---------------------+
| Sunday                |               2011 | January             |
+-----------------------+--------------------+---------------------+

在 MySQL 中,日期以YYYY-MM-DD格式编写。 年份之后是月份和日期。 它们可以用斜杠或连字符分隔。 MySQL 还支持缩短的日期格式,没有分隔符。 时间以标准格式HH:MM:SS编写。 小时后是分钟和秒。

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2011-01-22 00:24:49 |
+---------------------+

NOW()函数返回当前日期和时间。

mysql> SELECT CURTIME(), CURDATE();
+-----------+------------+
| CURTIME() | CURDATE()  |
+-----------+------------+
| 00:25:03  | 2011-01-22 |
+-----------+------------+

CURTIME()返回当前时间,CURDATE()返回当前日期。

mysql> SELECT DATEDIFF('2011-3-12', '2011-1-12');
+------------------------------------+
| DATEDIFF('2011-3-12', '2011-1-12') |
+------------------------------------+
|                                 59 |
+------------------------------------+

使用DATEDIFF(),我们可以得出两个日期之间的天数。

mysql> SELECT DAYNAME('1982-4-12'), MONTHNAME('1982-4-12') ;
+----------------------+------------------------+
| DAYNAME('1982-4-12') | MONTHNAME('1982-4-12') |
+----------------------+------------------------+
| Monday               | April                  |
+----------------------+------------------------+

DAYNAME()函数返回日期的日期名称。 MONTHNAME()函数返回日期的月份名称。

mysql> SELECT WEEKOFYEAR('110123'), WEEKDAY('110123'),
    -> QUARTER('110123');
+----------------------+-------------------+-------------------+
| WEEKOFYEAR('110123') | WEEKDAY('110123') | QUARTER('110123') |
+----------------------+-------------------+-------------------+
|                    3 |                 6 |                 1 |
+----------------------+-------------------+-------------------+

2011 年 1 月 23 日可以用缩短的日期格式 110123 书写。我们使用WEEKOFYEAR()来确定一年中的星期。 WEEKDAY()返回 6,即星期日。 并且QUARTER()函数返回一年的季度。

mysql> SELECT DATE_FORMAT('110123', '%d-%m-%Y');
+-----------------------------------+
| DATE_FORMAT('110123', '%d-%m-%Y') |
+-----------------------------------+
| 23-01-2011                        |
+-----------------------------------+

要以其他格式显示日期,我们使用DATE_FORMAT()

mysql> SELECT DATE_ADD('110123', INTERVAL 45 DAY), 
    -> SUBDATE('110309', INTERVAL 45 DAY);
+-------------------------------------+------------------------------------+
| DATE_ADD('110123', INTERVAL 45 DAY) | SUBDATE('110309', INTERVAL 45 DAY) |
+-------------------------------------+------------------------------------+
| 2011-03-09                          | 2011-01-23                         |
+-------------------------------------+------------------------------------+

我们可以使用DATE_ADD()为日期添加时间间隔,并使用SUBDATE()从日期中减去时间间隔。

系统函数

系统函数提供了有关 MySQL 数据库的一些系统信息。

mysql> SELECT VERSION(), DATABASE();
+--------------------+------------+
| VERSION()          | DATABASE() |
+--------------------+------------+
| 5.1.41-3ubuntu12.8 | mydb       |
+--------------------+------------+

我们得到 MySQL 数据库的版本和当前的数据库名称。

mysql> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+

USER()函数返回客户端提供的用户名和主机名。

mysql> SELECT CHARSET('ZetCode'), COLLATION('ZetCode');
+--------------------+----------------------+
| CHARSET('ZetCode') | COLLATION('ZetCode') |
+--------------------+----------------------+
| utf8               | utf8_general_ci      |
+--------------------+----------------------+

CHARSET()函数返回参数的字符集。 COLLATION()返回当前字符串参数的排序规则。 它们取决于使用中的客户端的字符集和排序规则。

在 MySQL 教程的这一部分中,我们使用了内置的 MySQL 函数。



回到顶部