MySQL 函数
最后修改于 2023 年 1 月 10 日
在 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 | +----+------------+--------+
我们有 Cars 表。
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 函数。