MySQL—常用函数

这篇博客详细介绍了MySQL中的常用函数,包括字符串函数如concat、insert、lower等,数值函数如abs、ceil、mod,日期函数如curdate、now、date_format,流程函数如if、ifnull,以及其他函数如database、version等。对于每个函数,都提供了具体的功能和示例,帮助读者理解和运用。
摘要由CSDN通过智能技术生成

1、字符串函数

  • concat(s1,s2,…sn)

将传入的参数连成字符串,如果与null相连,则值也为null

mysql> select concat('aaa','bbb','ccc'),concat('aaa',null);
+---------------------------+--------------------+
| concat('aaa','bbb','ccc') | concat('aaa',null) |
+---------------------------+--------------------+
| aaabbbccc                 | NULL               |
+---------------------------+--------------------+
1 row in set (0.00 sec)
  • insert(str,x,y,instr)

将字符串str从第x位开始,y个字符长的子串替换为instr

mysql> select insert('hello world',2,4,'ll');
+--------------------------------+
| insert('hello world',2,4,'ll') |
+--------------------------------+
| hll world                      |
+--------------------------------+
1 row in set (0.00 sec)
  • lower(str),upper(str)

将字符串str转为小写、大写

mysql> select lower('HELLO'),upper('hello');
+----------------+----------------+
| lower('HELLO') | upper('hello') |
+----------------+----------------+
| hello          | HELLO          |
+----------------+----------------+
1 row in set (0.00 sec)
  • left(str,x),right(str,x)

返回字符串str最左边、最右边x个字符

mysql> select left('hello',2),right('hello',2);
+-----------------+------------------+
| left('hello',2) | right('hello',2) |
+-----------------+------------------+
| he              | lo               |
+-----------------+------------------+
1 row in set (0.00 sec)
  • substring(str,x,y)

返回从字符串str中的第x位开始,y字符长度的子串

mysql> select substring('hello world',5,3);
+------------------------------+
| substring('hello world',5,3) |
+------------------------------+
| o w                          |
+------------------------------+
1 row in set (0.00 sec)
  • lpad(str,n,pad),rpad(str,n,pad)

用字符串pad对str最左边、最右边进行填充,直到长度达到n位为止

mysql> select lpad('hello',18,'world'),rpad('hello',18,'world');
+--------------------------+--------------------------+
| lpad('hello',18,'world') | rpad('hello',18,'world') |
+--------------------------+--------------------------+
| worldworldworhello       | helloworldworldwor       |
+--------------------------+--------------------------+
1 row in set (0.00 sec)
  • ltrim(str),rtrim(str),trim(str)

去除字符串左侧、右侧对空白字符

mysql> select concat('+','    hello'),concat('+',ltrim('    hello')),concat('hello    ','+'),concat(rtrim('hello    '),'+');
+-------------------------+--------------------------------+-------------------------+--------------------------------+
| concat('+','    hello') | concat('+',ltrim('    hello')) | concat('hello    ','+') | concat(rtrim('hello    '),'+') |
+-------------------------+--------------------------------+-------------------------+--------------------------------+
| +    hello              | +hello                         | hello    +              | hello+                         |
+-------------------------+--------------------------------+-------------------------+--------------------------------+
1 row in set (0.00 sec)
  • repeat(str,x)

将字符串str重复x次

mysql> select repeat('hello ',3);
+--------------------+
| repeat('hello ',3) |
+--------------------+
| hello hello hello  |
+--------------------+
1 row in set (0.00 sec)
  • replace(str,a,b)

用字符串b替换str中出现的所有字符串a

mysql> select replace('hello world world world','world','hello');
+----------------------------------------------------+
| replace('hello world world world','world','hello') |
+----------------------------------------------------+
| hello hello hello hello                            |
+----------------------------------------------------+
1 row in set (0.00 sec)

2、数值函数

  • abs(x):取绝对值
  • ceil(x):向上取整
  • floor(x):向下取整
  • mod(x,y):取余,相当于x%y
  • rand():取0-1内的随机数,不包括0,1
  • round(x,y):四舍五入,y表示小数点后的位数,如果不写y,默认为0
  • truncate(x,y):截断,y表示小数点后的位数

3、日期函数

  • curdate():返回当前日期
  • curtime():返回当前时间
  • now():返回当前日期和时间
mysql> select curdate(),curtime(),now();
+------------+-----------+---------------------+
| curdate()  | curtime() | now()               |
+------------+-----------+---------------------+
| 2018-09-05 | 19:45:00  | 2018-09-05 19:45:00 |
+------------+-----------+---------------------+
1 row in set (0.00 sec)
  • unix_timestamp(date):将日期转为时间戳
  • from_unixtime():将时间戳转为日期
mysql> select unix_timestamp('2018-09-05 19:46:28'),from_unixtime(1536147988);
+---------------------------------------+---------------------------+
| unix_timestamp('2018-09-05 19:46:28') | from_unixtime(1536147988) |
+---------------------------------------+---------------------------+
|                            1536147988 | 2018-09-05 19:46:28       |
+---------------------------------------+---------------------------+
1 row in set (0.01 sec)
  • year():获取年份
  • month():获取月份
  • day():获取日期
  • hour():获取小时
  • minute():获取分钟
  • second():获取秒数
mysql> select year(now()),month(now()),day(now()),hour(now()),minute(now()),second(now());
+-------------+--------------+------------+-------------+---------------+---------------+
| year(now()) | month(now()) | day(now()) | hour(now()) | minute(now()) | second(now()) |
+-------------+--------------+------------+-------------+---------------+---------------+
|        2018 |            9 |          5 |          19 |            51 |            31 |
+-------------+--------------+------------+-------------+---------------+---------------+
1 row in set (0.00 sec)
  • date_format(date,format)

按照字符串format格式格式化日期date,就是按照指定的格式显示日期

日期格式如下:

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

示例

mysql> select date_format(now(),'%Y-%m-%d'),date_format(now(),'%H:%i:%s');
+-------------------------------+-------------------------------+
| date_format(now(),'%Y-%m-%d') | date_format(now(),'%H:%i:%s') |
+-------------------------------+-------------------------------+
| 2018-09-06                    | 09:59:47                      |
+-------------------------------+-------------------------------+
1 row in set (0.00 sec)

4、流程函数

  • if(val,t,f)

如果value为真,返回t,如果为假,返回f

mysql> select * from users;
+----+-------+-----+
| id | name  | age |
+----+-------+-----+
|  1 | john  |  21 |
|  2 | May   |  35 |
|  3 | Lucy  |  18 |
|  4 | Jack  |  40 |
|  5 | James |   8 |
+----+-------+-----+
5 rows in set (0.00 sec)

mysql> select *,if(age>18,'成年','未成年') as status from users;
+----+-------+-----+-----------+
| id | name  | age | status    |
+----+-------+-----+-----------+
|  1 | john  |  21 | 成年      |
|  2 | May   |  35 | 成年      |
|  3 | Lucy  |  18 | 未成年    |
|  4 | Jack  |  40 | 成年      |
|  5 | James |   8 | 未成年    |
+----+-------+-----+-----------+
5 rows in set (0.00 sec)
  • ifnull(value1,value2)

如果value1不为null,返回value1,如果为null,返回value2

mysql> select * from users;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | john  |   21 |
|  2 | May   | NULL |
|  3 | Lucy  | NULL |
|  4 | Jack  |   40 |
|  5 | James | NULL |
+----+-------+------+
5 rows in set (0.00 sec)

mysql> select *,ifnull(age,0) as age from users;
+----+-------+------+-----+
| id | name  | age  | age |
+----+-------+------+-----+
|  1 | john  |   21 |  21 |
|  2 | May   | NULL |   0 |
|  3 | Lucy  | NULL |   0 |
|  4 | Jack  |   40 |  40 |
|  5 | James | NULL |   0 |
+----+-------+------+-----+
5 rows in set (0.00 sec)
  • case when [expr] then [result] … else [default] end
  • case [value] when [value] then … else [default] end

多条件判断,两者区别,第一种

mysql> select *,
    -> case when age<20 then '孩童'
    -> when age between 20 and 30 then '弱冠'
    -> when age between 30 and 40 then '而立'
    -> when age between 40 and 50 then '不惑'
    -> else '花甲' end as status from users;
+----+-------+------+--------+
| id | name  | age  | status |
+----+-------+------+--------+
|  1 | john  |   21 | 弱冠   |
|  2 | May   |   35 | 而立   |
|  3 | Lucy  |   18 | 孩童   |
|  4 | Jack  |   40 | 而立   |
|  5 | James |    8 | 孩童   |
+----+-------+------+--------+
5 rows in set (0.01 sec)

mysql> select *,
    -> case age
    -> when 18 then '刚好成年'
    -> when 21 then '成年3年了'
    -> else '其他情况' end as status from users;
+----+-------+------+---------------+
| id | name  | age  | status        |
+----+-------+------+---------------+
|  1 | john  |   21 | 成年3年了     |
|  2 | May   |   35 | 其他情况      |
|  3 | Lucy  |   18 | 刚好成年      |
|  4 | Jack  |   40 | 其他情况      |
|  5 | James |    8 | 其他情况      |
+----+-------+------+---------------+
5 rows in set (0.00 sec)

两者区别,第一种的条件判断可以使用各种条件,第二种只能匹配具体的值,所以很明显第一种适用范围更广

5、其他函数

  • database():显示当前数据库名
  • version():显示当前数据库版本
  • user():显示当前登陆用户名
mysql> select database(),version(),user();
+------------+-----------+----------------+
| database() | version() | user()         |
+------------+-----------+----------------+
| test       | 8.0.12    | root@localhost |
+------------+-----------+----------------+
1 row in set (0.01 sec)
  • password():加密
  • md5():md5加密

password()用来对mysql用户密码进行加密,是不可逆的

md5()用来对数据进行加密,也是不可逆的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值