SQL中的常用函数

SQL中的常用函数

SQL中常用的函数可分为:

  • 字符串函数
  • 日期函数
  • 数值函数

字符串函数

函数 描述
CONCAT(S1, S2,…,SN) 连接多个字符串为一个字符串
INSERT(str, x, y, instr) 将字符串str从x位置开始,y个字符长的子串替换为字符串instr
LOWER(str) 将字符串中的所有字符变成小写
UPPER(str) 将字符串中的所有字符变成大写
LEFT(str, x) 返回字符串最左边的x个字符
RIGHT(str, x) 返回字符串最右边的x个字符
LPAD(str, n, pad) 用字符串pad对str最左边进行填充,直到长度为n个字符长度
RPAD(str, n, pad) 用字符串pad对str最右边进行填充,直到长度为n个字符长度
LTRIM(str) 去掉字符串str左侧的空格
RTRIM(str) 去掉字符串str右侧的空格
REPEAT(str) 返回str重复x次的结果
STRCMP(s1, s2) 比较两个字符串ASCII码值的大小
TRIM(str) 去掉字符串首尾的空格
SUBSTRING(str, x, y) 返回从字符串str的x位置起y个字符长度的子串
mysql> SELECT CONCAT('a', 'b'), CONCAT('a', NULL);
+------------------+-------------------+
| CONCAT('a', 'b') | CONCAT('a', NULL) |
+------------------+-------------------+
| ab               | NULL              |
+------------------+-------------------+
1 row in set (0.00 sec)

NOTE:任何字符串和NULL拼接得到的结果都是NULL

mysql> SELECT INSERT('aaaaa', 2, 2, 'b');
+----------------------------+
| INSERT('aaaaa', 2, 2, 'b') |
+----------------------------+
| abaa                       |
+----------------------------+
1 row in set (0.00 sec)
mysql> SELECT LOWER('MYSQL'), UPPER('mysql');
+----------------+----------------+
| LOWER('MYSQL') | UPPER('mysql') |
+----------------+----------------+
| mysql          | MYSQL          |
+----------------+----------------+
1 row in set (0.00 sec)
mysql> SELECT LEFT('mysql', 2), RIGHT('mysql', 2);
+------------------+-------------------+
| LEFT('mysql', 2) | RIGHT('mysql', 2) |
+------------------+-------------------+
| my               | ql                |
+------------------+-------------------+
1 row in set (0.00 sec)
mysql> SELECT LEFT('mysql', 2), RIGHT('mysql', 2), LEFT('mysql', NULL), RIGHT('mysql', NULL);
+------------------+-------------------+---------------------+----------------------+
| LEFT('mysql', 2) | RIGHT('mysql', 2) | LEFT('mysql', NULL) | RIGHT('mysql', NULL) |
+------------------+-------------------+---------------------+----------------------+
| my               | ql                | NULL                | NULL                 |
+------------------+-------------------+---------------------+----------------------+
1 row in set (0.00 sec)

如果LEFT或是RIGHT指定长度为NULL时,这里同样返回NULL

mysql> SELECT LPAD('MYSQL', 13, 'LOVE'), RPAD('MYSQL', 13, 'LOVE');
+---------------------------+---------------------------+
| LPAD('MYSQL', 13, 'LOVE') | RPAD('MYSQL', 13, 'LOVE') |
+---------------------------+---------------------------+
| LOVELOVEMYSQL             | MYSQLLOVELOVE             |
+---------------------------+---------------------------+
1 row in set (0.00 sec)
mysql> SELECT LTRIM('  | MYSQL   '), RTRIM('   MYSQL|   ');
+-----------------------+-----------------------+
| LTRIM('  | MYSQL   ') | RTRIM('   MYSQL|   ') |
+-----------------------+-----------------------+
| | MYSQL               |    MYSQL|             |
+-----------------------+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT STRCMP('MYSQL', 'MYSQL'), STRCMP('MYSQL', 'ORACLE');
+--------------------------+---------------------------+
| STRCMP('MYSQL', 'MYSQL') | STRCMP('MYSQL', 'ORACLE') |
+--------------------------+---------------------------+
|                        0 |                        -1 |
+--------------------------+---------------------------+
1 row in set (0.01 sec)

其他的根据函数描述就知道用法,这里就不做试验了。

数值函数

函数 描述
ABS(x) 返回x的绝对值
CEIL(x) 向上取整
FLOOR(x) 向下取整
MOD(x, y) 返回 x / y 的模
RAND() 生成0~1之间的随机数
ROUND(x, y) 返回x的四舍五入的有y位小数的值
TRUNCATE(x, y) 返回x截断位y位小数的结果,仅仅截断不进行四舍五入
mysql> SELECT ROUND(1.2222, 3), ROUND(1.2, 3);
+------------------+---------------+
| ROUND(1.2222, 3) | ROUND(1.2, 3) |
+------------------+---------------+
|            1.222 |         1.200 |
+------------------+---------------+
1 row in set (0.00 sec)
mysql> SELECT TRUNCATE(1.222, 2);
+--------------------+
| TRUNCATE(1.222, 2) |
+--------------------+
|               1.22 |
+--------------------+
1 row in set (0.00 sec)

日期和时间函数

函数 描述
CURDATE() 返回当前时间
CURTIME() 返回当前时间
NOW() 返回当前的日期和时间
UNIX_TIMESTAMP(date) 返回日期date的UNIX时间戳
FROM_UNIXTIME 返回UNIX时间戳的日期值
WEEK(date) 返回date为一年中的第几周
YEAR(date) 返回date的年份
HOUR(time) 返回time的小时值
MINUTE(time) 返回time的分钟值
MONTHNAME(date) 返回date的月份名
DATE_FORMAT(date, fmt) 返回按字符串fmt格式化日期date值
DATE_ADD(date, INTERVAL expr type) 返回一个日期或事件值加上一个时间间隔的时间值
DATEDIFF(expr, expr2) 返回起始时间expr和结束时间expr2之间的天数
mysql> SELECT CURDATE(), CURTIME(), NOW();
+------------+-----------+---------------------+
| CURDATE()  | CURTIME() | NOW()               |
+------------+-----------+---------------------+
| 2020-04-16 | 17:44:54  | 2020-04-16 17:44:54 |
+------------+-----------+---------------------+
1 row in set (0.01 sec)
mysql> SELECT WEEK(NOW()), YEAR(NOW()), HOUR(CURTIME()), MINUTE(CURTIME()), MONTHNAME(NOW());
+-------------+-------------+-----------------+-------------------+------------------+
| WEEK(NOW()) | YEAR(NOW()) | HOUR(CURTIME()) | MINUTE(CURTIME()) | MONTHNAME(NOW()) |
+-------------+-------------+-----------------+-------------------+------------------+
|          15 |        2020 |              17 |                47 | April            |
+-------------+-------------+-----------------+-------------------+------------------+
1 row in set (0.01 sec)
mysql> SELECT DATEDIFF('2008-08-08', NOW());
+-------------------------------+
| DATEDIFF('2008-08-08', NOW()) |
+-------------------------------+
|                         -4269 |
+-------------------------------+
1 row in set (0.01 sec)

流程函数

| 函数                                                         | 描述                                             |
| :----------------------------------------------------------- | ------------------------------------------------ |
| IF(value,t, f)                                               | 如果value为真,返回t,否则返回f                   |
| IFNULL(value1, value2)                                       | 如果value不为空。返回value1,否则返回value2      |
| CASE WHEN [value1] THEN [results]...ELSE [default] END       | 如果value为真,返回result1, 否则返回default     |
| CASE [expr] WHEN [value] THEN [results] ... ELSE[default] END | 如果expr等于value1,返回result1,否则返回default |
mysql> SELECT IF(points > 2500, 'high', 'low') FROM CUSTOMERS;
+----------------------------------+
| IF(points > 2500, 'high', 'low') |
+----------------------------------+
| low                              |
| low                              |
| high                             |
| low                              |
| high                             |
| high                             |
| low                              |
| low                              |
| low                              |
| low                              |
| low                              |
+----------------------------------+
11 rows in set (0.00 sec)

mysql> SELECT IFNULL(CUSTOMERS, 0) FROM CUSTOMERS;
ERROR 1054 (42S22): Unknown column 'CUSTOMERS' in 'field list'
mysql> SELECT IFNULL(points, 0) FROM CUSTOMERS;
+-------------------+
| IFNULL(points, 0) |
+-------------------+
|              2273 |
|               947 |
|              2967 |
|               457 |
|              3675 |
|              3073 |
|              1672 |
|               205 |
|              1486 |
|               796 |
|                81 |
+-------------------+
11 rows in set (0.00 sec)

mysql> SELECT CASE WHEN points > 2500 THEN 'high' ELSE 'low' END FROM CUSTOMERS;
+----------------------------------------------------+
| CASE WHEN points > 2500 THEN 'high' ELSE 'low' END |
+----------------------------------------------------+
| low                                                |
| low                                                |
| high                                               |
| low                                                |
| high                                               |
| high                                               |
| low                                                |
| low                                                |
| low                                                |
| low                                                |
| low                                                |
+----------------------------------------------------+
11 rows in set (0.00 sec)

其他常用函数

函数 描述
DATABASE() 返回当前数据库名
VERSION() 返回当前数据库版本
USER() 返回当前登录用户名
INET_ATON(IP) 返回IP地址的数字表示
INET_NTOA(num) 返回数字代表的IP地址
PASSWORD(str) 返回sr的加密版本,一个41位的字符串
MD5(str) 返回str的MD5值
发布了448 篇原创文章 · 获赞 122 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/105563954
今日推荐