程序员需掌握的SQL数学函数、字符串函数(四)

前言

MySQL 中的函数包括:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数等,下面将介绍MySQL中这些函数的功能与用法。

1.数学函数

MySQL支持多种数学类型的函数,它们包括:绝对值函数、随机函数等。下表列出了MySQL中经常使用的数组函数。

函数名称 解释说明
ABS (num) 返回num的绝对值
CEIL(num) 返回大于num的最小整数值
FLOOR(num) 返回小于num的最大正整数
MOD(num1,num2) 返回 num1 % num2 的值
RAND() 返回0-1的随机数
TRUNCATE(num1,num2) 返回num1 截断num2 位小数
ROUND(num1,num2) 返回参数num1的四舍五入带有num2小数的值
POW(x,y) 返回x的y次方

1.1 ABS

下列显示了对正数与负数的使用绝对值函数的结果。

mysql> mysql> select abs(-1.2),abs(1.2);
+-----------+----------+
| abs(-1.2) | abs(1.2) |
+-----------+----------+
|       1.2 |      1.2 |
+-----------+----------+
1 row in set (0.00 sec)

1.2 CEIL

CEIL(X) 返回一个比x大的最小整数

mysql> select ceil(1.6),ceil(1.2),ceil(-1.2);
+-----------+-----------+------------+
| ceil(1.6) | ceil(1.2) | ceil(-1.2) |
+-----------+-----------+------------+
|         2 |         2 |         -1 |
+-----------+-----------+------------+
1 row in set (0.00 sec)

1.3 FLOOR

FLOOR(x) 返回一个比x小的最大整数

mysql> select FLOOR(1.8),FLOOR(-1.8);
+------------+-------------+
| FLOOR(1.8) | FLOOR(-1.8) |
+------------+-------------+
|          1 |          -2 |
+------------+-------------+
1 row in set (0.00 sec)

1.4 MOD

MOD(x,y) 返回x%y的模

mysql> select mod(10,3);
+-----------+
| mod(10,3) |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)

1.5 RAND

RAND() 返回0-1 的随机数

mysql> select rand();
+--------------------+
| rand()             |
+--------------------+
| 0.8903573117129107 |
+--------------------+
1 row in set (0.00 sec)

1.6 ROUND

round(x,y) 返回参数x的四舍五入的y位尾数

mysql> select round(1.23,2),round(1.67,2),round(1.44,2);
+---------------+---------------+---------------+
| round(1.23,2) | round(1.67,2) | round(1.44,2) |
+---------------+---------------+---------------+
|          1.23 |          1.67 |          1.44 |
+---------------+---------------+---------------+
1 row in set (0.00 sec)

1.7 TRUNCATE

TRUNCATE(x,y) 返回x截断为y位小数的结果

mysql> select round(1.23,2),round(1.67,2),round(1.44,2),truncate(1.23,2),truncate(1.67,2),truncate(1.44,2);
+---------------+---------------+---------------+------------------+------------------+------------------+
| round(1.23,2) | round(1.67,2) | round(1.44,2) | truncate(1.23,2) | truncate(1.67,2) | truncate(1.44,2) |
+---------------+---------------+---------------+------------------+------------------+------------------+
|          1.23 |          1.67 |          1.44 |             1.23 |             1.67 |             1.44 |
+---------------+---------------+---------------+------------------+------------------+------------------+
1 row in set (0.00 sec)

1.8 POW

POW(x,y) 返回x的y次方

mysql> select pow(2,3);
+----------+
| pow(2,3) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)

MySQL同时也支持三角函数(正弦函数、余弦函数、正切函数、余切函数)、对数函数 ,一般在日常开发中使用到数学函数的场景几乎没有,一般我们都是在Java程序中处理好相关的数学计算后,在存储到MySQL中。

2. 字符串函数

字符串函数是MySQL中最常见的函数,下面列出了常用的字符串函数:

2.1 CHAR_LENGTH与LENGTH

mysql> select char_length('abc');
+--------------------+
| char_length('abc') |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)
mysql> select length('abc');
+---------------+
| length('abc') |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

LENGTH(str) 返回字符串字节长度

mysql> select length('我');
+---------------+
| length('我')  |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)
mysql> select char_length('我');
+--------------------+
| char_length('我')  |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

2.2 CONCAT

CONCAT(s1,s2…) 将传入的字符串进行拼接,需要注意的是任何与NULL进行拼接的字符串返回结果都为NULL

mysql> select concat(1,'a'),concat(null,'a');
+---------------+------------------+
| concat(1,'a') | concat(null,'a') |
+---------------+------------------+
| 1a            | NULL             |
+---------------+------------------+
1 row in set (0.00 sec)

2.3 INSERT

INSERT(str,x,y,str1) 将str1 插入到str的x位置开始,y的位置结束

mysql> select insert('abc',1,2,'haha123');
+-----------------------------+
| insert('abc',1,2,'haha123') |
+-----------------------------+
| haha123c                    |
+-----------------------------+
1 row in set (0.00 sec)

2.4 LOWER 与UPPER

LOWER(str)、UPPER(str)函数:将字符串转换成小写或大写:

mysql> select UPPER('abc'),LOWER('ABC');
+--------------+--------------+
| UPPER('abc') | LOWER('ABC') |
+--------------+--------------+
| ABC          | abc          |
+--------------+--------------+
1 row in set (0.00 sec)

2.5 LEFT 与 RIGHT

LEFT(str,x) 和 RIGHT(str,x) 函数分别返回字符串最左边x个字符或最右边x个字符

mysql> select LEFT('i love china,because i am a chinese',12),RIGHT('i love china,because i am a chinese',15);
+------------------------------------------------+-------------------------------------------------+
| LEFT('i love china,because i am a chinese',12) | RIGHT('i love china,because i am a chinese',15) |
+------------------------------------------------+-------------------------------------------------+
| i love china                                   |  i am a chinese                                 |
+------------------------------------------------+-------------------------------------------------+
1 row in set (0.00 sec)

2.6 REPLACE

REPLACE(str,s1,s2) 将str中包含是s1的字符序列替换为s2

mysql> select replace('abc','ab','bb');
+--------------------------+
| replace('abc','ab','bb') |
+--------------------------+
| bbc                      |
+--------------------------+
1 row in set (0.01 sec)

2.7 TRIM

TRIM(str) 去掉字符串开头、结尾的空格

mysql> select trim(' a bc ');
+----------------+
| trim(' a bc ') |
+----------------+
| a bc           |
+----------------+
1 row in set (0.00 sec)

2.8 SUBSTRING

SUBSTRING(str,x,y) 截取字符串str从x位置开始到y结束

mysql> select substring('abcd',1,1);
+-----------------------+
| substring('abcd',1,1) |
+-----------------------+
| a                     |
+-----------------------+
1 row in set (0.00 sec)

2.9 LOCATE、POSITION、INSTR

LOCATE(s,str)、POSITION(s in str)、INSTR(str,s) 这三个函数作用相同即返回字符串s在str的开始位置,需要注意三个函数之间的参赛顺序

mysql> select locate('a','abc'),position('a' in 'abc'),instr('abc','a');
+-------------------+------------------------+------------------+
| locate('a','abc') | position('a' in 'abc') | instr('abc','a') |
+-------------------+------------------------+------------------+
|                 1 |                      1 |                1 |
+-------------------+------------------------+------------------+
1 row in set (0.00 sec)

2.10 REVERSE

REVERSE(str) 将字符串序列进行反转

mysql> select REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+
1 row in set (0.00 sec)

2.11 FIELD

FIELD(s,s1,s2 …) 返回字符串s在s1、s2 …中第一次出现的位置,如若没有则返回0。

mysql> select FIELD('a','ab','a');
+---------------------+
| FIELD('a','ab','a') |
+---------------------+
|                   2 |
+---------------------+
1 row in set (0.00 sec)

2.12 FIND_IN_SET

FIND_IN_SET(s1,s2) 返回字符串s1在字符串s2出现的位置,这一点与FIELD很类似,但是注意参数


mysql> select FIND_IN_SET('a','caba,aa,a');
+------------------------------+
| FIND_IN_SET('a','caba,aa,a') |
+------------------------------+
|                            3 |
+------------------------------+
1 row in set (0.00 sec)

下一篇我们将结束MySQL的时间函数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章