文章目录
- 一、日期函数
- 二、字符串函数
- 三、数学函数
- 四、其他函数
一、日期函数
| 函数名称 | 功能描述 |
|---|---|
| current_data() | 获取当前日期 |
| current_time() | 获取当前时间 |
| current_timestamp() | 获取当前时间戳 |
| date() | 返回datetime的日期部分 |
| date_add(date, interval d_value_type) | 以date为基础,添加日期或者时间,interval 后面指定时间的类型,例如year、month、day等等 |
| date_sub(date, interval d_value_type) | 以date为基础,减去日期或者时间,interval 后面指定时间的类型,例如year、month、day等等 |
| datediff(date1, date2) | 两个日期的差,单位是天数 |
| now() | 获取当前日期时间 |
获取当前年月日
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2023-05-07 |
+----------------+
1 row in set (0.00 sec)
获取当前时分秒
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 20:11:07 |
+----------------+
1 row in set (0.00 sec)
获取当前时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2023-05-07 20:12:27 |
+---------------------+
1 row in set (0.00 sec)
获取当前时间戳的日期部分
mysql> select date(current_timestamp());
+---------------------------+
| date(current_timestamp()) |
+---------------------------+
| 2023-05-07 |
+---------------------------+
1 row in set (0.00 sec)
在日期的基础上加天数
mysql> select date_add(current_date, interval 10 day);
+-----------------------------------------+
| date_add(current_date, interval 10 day) |
+-----------------------------------------+
| 2023-05-17 |
+-----------------------------------------+
1 row in set (0.00 sec)
在日期的基础上减去天数
mysql> select date_sub(current_date, interval 10 day);
+-----------------------------------------+
| date_sub(current_date, interval 10 day) |
+-----------------------------------------+
| 2023-04-27 |
+-----------------------------------------+
1 row in set (0.00 sec)
计算两个日期之间相差多少天
mysql> select datediff('2023-5-7', '2023-1-1');
+----------------------------------+
| datediff('2023-5-7', '2023-1-1') |
+----------------------------------+
| 126 |
+----------------------------------+
1 row in set (0.00 sec)
二、字符串函数
| 函数名称 | 功能描述 |
|---|---|
| charset(str) | 返回字符串对应的字符集 |
| concat(string2, […, …]) | 连接字符串 |
| instr(string, substring) | 返回substring在string中出现的位置,没有则返回0 |
| ucase(str) | 转化为大写 |
| lcase(str) | 转化为小写 |
| left(str, length) | 从str左边起取length个字符 |
| right(str, length) | 从str右边起取length个字符 |
| length(str) | 获取str的长度 |
| replace(str, search_str, replace_str) | 在str中,用replace_str替换search_str |
| substring(str, position, [length]) | 从str的position位置开始,截取length长度的字符串 |
| strcmp(str1, str2) | 逐字符比较两字符串大小,相对返回0,前者大返回1,否则返回-1 |
| ltrim(str)、rtrim(str)、trim(str) | 去除字符串前后的空格 |
charset函数

由此可见,数字在数据库中是以二进制的形式存储的。
concat函数

instr函数

说明在MySQL中,字符的第一个位置的下标是1,而不是0。
ucase函数和lcase函数

left函数

right函数

length函数

注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)。
replace函数

substring函数

strcmp函数

ltrim、rtrim、trim函数

三、数学函数
| 函数名称 | 功能描述 |
|---|---|
| abs(number) | 绝对值函数 |
| ceiling(number) | 向上取整 |
| floor(number) | 向下取整 |
| bin(decimal_num) | 十进制转二进制 |
| hex(decimal_num) | 十进制转十六进制 |
| conv(number, from_base, to_base) | 进制转换 |
| format(number, decimal_places) | 格式化,保留小数位数 |
| rand() | 返回随机浮点数,范围[0.0, 1.0) |
| mod(number, denominator) | 取模求余 |
取绝对值

向上取整

向下取整

保留两位小数(小数四舍五入)

产生随机数

四、其他函数
- user()函数用于查询当前用户

- md5(str)函数用于对一个字符串进行md5摘要,摘要后得到一个32位字符串

值得一提的是:
- 一般情况下公司内部数据库不会存储用户的明文密码,而会将用户密码形成摘要后存储对应的摘要,当用户登录账号时,将用户输入的的密码形成摘要后与数据库中存储的摘要做对比,如果对比成功则允许登录。
- 这么做的好处主要有两个,第一个好处就是公司内部数据库中存储的不是用户的明文信息,就算用户信息泄露了也不会产生太大影响,第二个好处就是形成的摘要是定长的,这样有利于数据库表结构的设计。
- database()显示当前正在使用的数据库

- password()函数,MySQL数据库使用该函数对用户加密

password函数和md5函数类似,只是password函数专门用于对MySQL用户的登录密码进行加密的。另外,我有一个有趣的发现,那就是MySQL不会对出现password或者md5的SQL语句做历史记录,因此在命令行模式按上下键找不到刚才执行过的SQL语句,一定程度上也保护了明文密码的安全。
- ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

ifnull函数其实就相当于C/C++中的三目运算符。



















