MySQL 提供了很多内置函数,通过这些内置函数,您可以在查询数据的同时对数据做一些相应的处理,无需再使用其它编程语言来处理。例如 MySQL 存储日期时间大多都会用 INT
类型的时间戳,直接查询出来是一串数字,还需要用 PHP 之类的语言来格式化。通过 MySQL 的内置函数您可以在查询的同时就对时间戳做格式化处理。
数学函数
数学函数可以用来处理各种数值类型的数据。
CEIL()
CEIL
的功能是对小数进行 向上取整。
用法如下:
SELECT CEIL(3.1)
+-----------+
| CEIL(3.1) |
+-----------+
| 4 |
+-----------+
3.1
的小数向上取整后就是 4
。
我这里为了方便演示,数据表中没有的数据就不输出数据表了。
如果是在正常的数据查询中可以在括号内传入字段名称。
FLOOR()
FLOOR
的功能是对小数进行 向下取整。
用法如下:
SELECT FLOOR(3.1)
+------------+
| FLOOR(3.1) |
+------------+
| 3 |
+------------+
3.1
的小数向下取整就是 3
,也就是直接去除小数。
POWER()
POWER
的功能是 幂运算。
下面计算 3 的 4 次方:
SELECT POWER(3, 4)
+-------------+
| POWER(3, 4) |
+-------------+
| 81 |
+-------------+
ROUND()
ROUND
的功能是 四舍五入。
下面对 9.9999
进行四舍五入,保留小数点后两位:
SELECT ROUND(9.9999, 2)
+------------------+
| ROUND(9.9999, 2) |
+------------------+
| 10.00 |
+------------------+
TRUNCATE()
TRUNCATE
的功能是 数字截取。TRUNCATE
和 ROUND
不一样的地方就是 TRUNCATE
只会截取数字,不会四舍五入。
下面对 9.9999
进行截取,保留小数点后两位:
SELECT TRUNCATE(9.9999, 2)
+---------------------+
| TRUNCATE(9.9999, 2) |
+---------------------+
| 9.99 |
+---------------------+
ABS()
ABS
的功能是 获取绝对值。
下面获取 -3
的绝对值:
SELECT ABS(-3)
+---------+
| ABS(-3) |
+---------+
| 3 |
+---------+
字符函数
字符函数可以用来处理各种字符串类型的数据。
CONCAT()
CONCAT
的功能是 字符串连接。
用法如下:
SELECT CONCAT('孙', '悟空')
+----------------------+
| CONCAT('孙', '悟空') |
+----------------------+
| 孙悟空 |
+----------------------+
一般很多国外的网站性和名都是分开存储的,在查询的时候就可以用 CONCAT
来连接。
下面是一张性和名分开存储的表格:
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| 军 | 雷 |
| 永浩 | 罗 |
+------------+-----------+
下面用 CONCAT
来连接名和性:
SELECT CONCAT(last_name, first_name) AS name FROM user2
+--------+
| name |
+--------+
| 雷军 |
| 罗永浩 |
+--------+
其中的 AS name
是给查询出来的数据取一个别名,所以查询出来的表头的字段就是 name
。
CONCAT_WS()
CONCAT_WS
的功能是 使用分隔符来连接字符串。
用法如下:
SELECT CONCAT_WS('-', '中国', '北京')
+--------------------------------+
| CONCAT_WS('-', '中国', '北京') |
+--------------------------------+
| 中国-北京 |
+--------------------------------+
第 1 个参数是分隔符,后面的参数就是要连接的字段。
LOWER()
LOWER
的功能是把字符 转换为 小写。
SELECT LOWER('HTML')
+---------------+
| LOWER('HTML') |
+---------------+
| html |
+---------------+
UPPER()
UPPER
的功能是把字符串 转换为 大写。
SELECT UPPER('mit')
+--------------+
| UPPER('mit') |
+--------------+
| MIT |
+--------------+
LEFT()
LEFT
的功能是 从左侧开始截取字符。
下面截取 My Name is Mark
的前两个字符:
SELECT LEFT('My Name is Mark', 2)
+----------------------------+
| LEFT('My Name is Mark', 2) |
+----------------------------+
| My |
+----------------------------+
RIGHT()
和 LEFT
相反,从结尾开始截取字符。
SELECT RIGHT('My Name is Mark', 4)
+-----------------------------+
| RIGHT('My Name is Mark', 4) |
+-----------------------------+
| Mark |
+-----------------------------+
LENGTH()
LENGTH
的功能是 获取字符串长度
SELECT LENGTH('My Name is Mark')
+---------------------------+
| LENGTH('My Name is Mark') |
+---------------------------+
| 15 |
+---------------------------+
LTRIM()
LTRIM
的功能是 去除开头的空格。
SELECT LTRIM(' Apple')
+------------------+
| LTRIM(' Apple') |
+------------------+
| Apple |
+------------------+
RTRIM()
RTRIM
的功能是 去除结尾的空格。
因为用法和 LTRIM
差不多,这里就不演示了。
REPLACE()
REPLACE
的功能是 字符串替换。
下面把 Apple
中的 p
替换为 *
:
SELECT REPLACE('Apple', 'p', '*')
+----------------------------+
| REPLACE('Apple', 'p', '*') |
+----------------------------+
| A**le |
+----------------------------+
SUBSTRING()
SUBSTRING
的功能是 截取字符,您可以手动指定截取字符的起始位置和需要截取的字符数量。
下面从 My Name is Mark
的第 9 位开始截取两个字符:
SELECT SUBSTRING('My Name is Mark', 9, 2)
+------------------------------------+
| SUBSTRING('My Name is Mark', 9, 2) |
+------------------------------------+
| is |
+------------------------------------+