0
点赞
收藏
分享

微信扫一扫

MySQL字符函数

耳一文 2022-11-08 阅读 180


本文以实例形式来讲解MySQL的函数

按照功能的分类
1 字符函数
2 数值运算符与函数
3 比较运算符与函数
4 日期时间函数
5 信息函数
6 聚合函数
7 加密函数

字符函数分类
CONCAT()                 字符连接
CONCAT_WS()          使用指定的分隔符进行连接
FORMAT()                  数字格式化
LOWER()                    转换成小写字母
UPPER()                     转换成大写字母
LEFT()                        获取左侧字符
RIGHT()                      获取右侧字符

字符函数分类
CONCAT()                 字符连接
CONCAT_WS()          使用指定的分隔符进行连接
FORMAT()                  数字格式化
LOWER()                    转换成小写字母
UPPER()                     转换成大写字母
LEFT()                        获取左侧字符
RIGHT()                      获取右侧字符

CONCAT()字符连接,数据表的名字后面可以加东西
例1
mysql> SELECT CONCAT('provinces','--');
+--------------------------+
| CONCAT('provinces','--') |
+--------------------------+
| provinces--              |
+--------------------------+
1 row in set (0.00 sec)
创建一张演示表
mysql> CREATE TABLE testwish(
    -> first_name VARCHAR(20) DEFAULT NULL,
    -> last_name VARCHAR(10)  DEFAULT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)


mysql> SHOW COLUMNS FROM testwish;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| first_name | varchar(20) | YES  |     | NULL    |       |
| last_name  | varchar(10) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)


插入一些记录
mysql> INSERT testwish(first_name,last_name) VALUES('QQ','121'),('AC','BD'),('121','725');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> SELECT * FROM testwish;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| QQ         | 121       |
| AC         | BD        |
| 121        | 725       |
+------------+-----------+
3 rows in set (0.00 sec)

例2
把这两个字段合并在一起输出,用AS起个别名
mysql> SELECT CONCAT(first_name,last_name) AS  fullname FROM testwish;
+----------+
| fullname |
+----------+
| QQ121    |
| ACBD     |
| 121725   |
+----------+
3 rows in set (0.00 sec)


CONCAT_WS()需要至少三个参数
例3,字符连接
mysql> SELECT CONCAT_WS('|','A','B','C');
+----------------------------+
| CONCAT_WS('|','A','B','C') |
+----------------------------+
| A|B|C                      |
+----------------------------+
1 row in set (0.00 sec)


mysql>
mysql> SELECT CONCAT_WS('-','test1','test2');
+--------------------------------+
| CONCAT_WS('-','test1','test2') |
+--------------------------------+
| test1-test2                    |
+--------------------------------+
1 row in set (0.00 sec)


mysql> SELECT CONCAT_WS('-','test1','test2','test');
+---------------------------------------+
| CONCAT_WS('-','test1','test2','test') |
+---------------------------------------+
| test1-test2-test                      |
+---------------------------------------+
1 row in set (0.00 sec)

例4
截取小数点后两位数字
mysql> SELECT FORMAT(12580.45632,2);
+-----------------------+
| FORMAT(12580.45632,2) |
+-----------------------+
| 12,580.46             |
+-----------------------+
1 row in set (0.00 sec)

例5
大写转换成小写
mysql> SELECT LOWER('MySQL');
+----------------+
| LOWER('MySQL') |
+----------------+
| mysql          |
+----------------+
1 row in set (0.00 sec)
例6
小写转换成大写
mysql> SELECT UPPER('mysql');
+----------------+
| UPPER('mysql') |
+----------------+
| MYSQL          |
+----------------+
1 row in set (0.00 sec)


例7
获取左侧N个字符
mysql> SELECT LEFT('mysql',2);
+-----------------+
| LEFT('mysql',2) |
+-----------------+
| my              |
+-----------------+
1 row in set (0.00 sec)
例8 获取左侧N个字符,并转换为小写。用嵌套
mysql> SELECT LOWER(LEFT('MySQL',2));
+------------------------+
| LOWER(LEFT('MySQL',2)) |
+------------------------+
| my                     |
+------------------------+
1 row in set (0.00 sec)

例9
 获取右侧 N个字符
mysql> SELECT RIGHT('MySQL',2);
+------------------+
| RIGHT('MySQL',2) |
+------------------+
| QL               |
+------------------+
1 row in set (0.00 sec)

字符函数
LENGTH()              获取字符串长度
LTRIM()                  删除前导空格
RTRIM()                 删除后续空格 
TRIM()                   删除前导和后续空格
SUBSTRING()       字符串截取
[NOT]LIKE             模式匹配
PERLACE()          字符串替换

例10 获取字符串长度
mysql> SELECT LENGTH('MySQL');
+-----------------+
| LENGTH('MySQL') |
+-----------------+
|               5 |
+-----------------+
1 row in set (0.00 sec)
注意如果有空格,也会算在里面
mysql> SELECT LENGTH('  My  SQL');
+---------------------+
| LENGTH('  My  SQL') |
+---------------------+
|                   9 |
+---------------------+
1 row in set (0.00 sec)

前导空格,是第一个字符之前 的空格,后续空格,是最后一个字符之后的空格
例11,删除前导空格,并查看长度
mysql> SELECT LENGTH ('  MySQL    ');
+------------------------+
| LENGTH ('  MySQL    ') |
+------------------------+
|                     11 |
+------------------------+
1 row in set (0.00 sec)


mysql> SELECT LENGTH (LTRIM('  MySQL    '));
+-------------------------------+
| LENGTH (LTRIM('  MySQL    ')) |
+-------------------------------+
|                             9 |
+-------------------------------+
1 row in set (0.00 sec)

例12,删除 后续空格,并查看长度
mysql> SELECT LENGTH (RTRIM('  MySQL    '));
+-------------------------------+
| LENGTH (RTRIM('  MySQL    ')) |
+-------------------------------+
|                             7 |
+-------------------------------+
1 row in set (0.00 sec)
例13 去掉所有空格,并查看长度
mysql> SELECT LENGTH (TRIM('  MySQL    '));
+------------------------------+
| LENGTH (TRIM('  MySQL    ')) |
+------------------------------+
|                            5 |
+------------------------------+
1 row in set (0.00 sec)

例14 删除前导中的“?”
mysql> SELECT TRIM(LEADING '?' FROM '??MySQL???');
+-------------------------------------+
| TRIM(LEADING '?' FROM '??MySQL???') |
+-------------------------------------+
| MySQL???                            |
+-------------------------------------+
1 row in set (0.00 sec)
例15 删除后续中的”?”
mysql> SELECT TRIM(TRAILING '?' FROM '??MySQL???');
+--------------------------------------+
| TRIM(TRAILING '?' FROM '??MySQL???') |
+--------------------------------------+
| ??MySQL                              |
+--------------------------------------+
1 row in set (0.00 sec)

 例16 删除所有的”?”
mysql> SELECT TRIM(BOTH '?' FROM '??MySQL???');
+----------------------------------+
| TRIM(BOTH '?' FROM '??MySQL???') |
+----------------------------------+
| MySQL                            |
+----------------------------------+
1 row in set (0.00 sec)
注意BOTH 删除不掉中间的”?”
mysql> SELECT TRIM(BOTH '?' FROM '??My??SQL???');
+------------------------------------+
| TRIM(BOTH '?' FROM '??My??SQL???') |
+------------------------------------+
| My??SQL                            |
+------------------------------------+
1 row in set (0.00 sec)

例17用字符串替换掉字符串
mysql> SELECT REPLACE('??My??SQL????','?','--');
+-----------------------------------+
| REPLACE('??My??SQL????','?','--') |
+-----------------------------------+
| ----My----SQL--------             |
+-----------------------------------+
1 row in set (0.00 sec)


mysql> SELECT REPLACE('??My??SQL????','?','');
+---------------------------------+
| REPLACE('??My??SQL????','?','') |
+---------------------------------+
| MySQL                           |
+---------------------------------+
1 row in set (0.00 sec)

例18 用字符串替换掉字符串,一对多
mysql> SELECT REPLACE('??My??SQL????','?','-+-!!');
+-----------------------------------------------+
| REPLACE('??My??SQL????','?','-+-!!')          |
+-----------------------------------------------+
| -+-!!-+-!!My-+-!!-+-!!SQL-+-!!-+-!!-+-!!-+-!! |
+-----------------------------------------------+
1 row in set (0.00 sec)
例19用字符串替换掉字符串,多对一
mysql> SELECT REPLACE('??My??SQL????','??','~');
+-----------------------------------+
| REPLACE('??My??SQL????','??','~') |
+-----------------------------------+
| ~My~SQL~~                         |
+-----------------------------------+
1 row in set (0.00 sec)

例20,字符串截取,从第一位开始,截取两个
mysql> SELECT SUBSTRING('MySQL',1,2);
+------------------------+
| SUBSTRING('MySQL',1,2) |
+------------------------+
| My                     |
+------------------------+
1 row in set (0.00 sec)
注意不指定位置的情况
mysql> SELECT SUBSTRING('MySQL',3);
+----------------------+
| SUBSTRING('MySQL',3) |
+----------------------+
| SQL                  |
+----------------------+
1 row in set (0.00 sec)

例21 倒序截取
mysql> SELECT SUBSTRING('MySQL',-2);
+-----------------------+
| SUBSTRING('MySQL',-2) |
+-----------------------+
| QL                    |
+-----------------------+
1 row in set (0.00 sec)

模式的匹配,%表示0个或多个字符,‘1’表示TRUE 
mysql> SELECT 'MySQL' LIKE 'M%';
+-------------------+
| 'MySQL' LIKE 'M%' |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)
例22  查找第一个字符组中包含‘Q’的用户 
mysql> SELECT * FROM testwish WHERE first_name LIKE '%Q%';
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| QQ         | 121       |
+------------+-----------+
1 row in set (0.00 sec)

当前表
mysql> SELECT *  FROM testwish;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| QQ         | 121       |
| AC         | BD        |
| 121        | 725       |
| tom%       | 2016      |
+------------+-----------+
例子23查找 包含% 的用户
告诉字符串,1 后面的不需要再进行通配符解析,直接默认为是标准的%
mysql> SELECT * FROM testwish WHERE first_name LIKE '%1%%' ESCAPE '1';
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| tom%       | 2016      |
+------------+-----------+












举报

相关推荐

0 条评论