阅读导航
- 引言
- 一、日期函数
-
- [1. current_date()](#1. current_date())
- [2. current_time()](#2. current_time())
- [3. current_timestamp()](#3. current_timestamp())
- [4. date(datetime)](#4. date(datetime))
- [5. date_add(date, interval d_value_type)](#5. date_add(date, interval d_value_type))
- [6. date_sub(date, interval d_value_type)](#6. date_sub(date, interval d_value_type))
- [7. datediff(date1, date2)](#7. datediff(date1, date2))
- [8. now()](#8. now())
- 二、字符串函数
-
- [1. CONCAT(str1, str2, ...)](#1. CONCAT(str1, str2, ...))
- [2. INSTR(str, substr)](#2. INSTR(str, substr))
- [3. UCASE(str) 或 UPPER(str)](#3. UCASE(str) 或 UPPER(str))
- [4. LCASE(str) 或 LOWER(str)](#4. LCASE(str) 或 LOWER(str))
- [5. LEFT(str, len)](#5. LEFT(str, len))
- [6. LENGTH(str)](#6. LENGTH(str))
- [7. REPLACE(str, from_str, to_str)](#7. REPLACE(str, from_str, to_str))
- [8. SUBSTRING(str, pos, len)](#8. SUBSTRING(str, pos, len))
- [9. LTRIM(str)](#9. LTRIM(str))
- [10. RTRIM(str)](#10. RTRIM(str))
- [11. TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)](#11. TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str))
- 三、数学函数
-
- [1. abs(number) - 绝对值函数](#1. abs(number) - 绝对值函数)
- [2. bin(decimal_number)- 十进制转换二进制](#2. bin(decimal_number)- 十进制转换二进制)
- [3. hex(decimalNumber)- 转换成十六进制](#3. hex(decimalNumber)- 转换成十六进制)
- [4. conv(number, from_base, to_base) - 进制转换](#4. conv(number, from_base, to_base) - 进制转换)
- [5. ceiling(number) - 向上去整](#5. ceiling(number) - 向上去整)
- [6. floor(number) - 向下去整](#6. floor(number) - 向下去整)
- [7. format(number, decimal_places) - 格式化,保留小数位数](#7. format(number, decimal_places) - 格式化,保留小数位数)
- [8. rand() - 返回随机浮点数](#8. rand() - 返回随机浮点数)
- [9. mod(number, denominator) - 取模,求余](#9. mod(number, denominator) - 取模,求余)
- 四、其它函数
-
- [1. 查询当前用户](#1. 查询当前用户)
- [2. MD5摘要函数](#2. MD5摘要函数)
- [3. 显示当前数据库](#3. 显示当前数据库)
- [4. 密码加密函数](#4. 密码加密函数)
- [5. IFNULL函数](#5. IFNULL函数)
引言
上一篇文章,我们学习了MySQL中如何利用聚合函数和GROUP BY
进行分组查询,这让我们能轻松地从大量数据中提炼出关键信息。今天,我们将踏上一段新的旅程,探索MySQL的【内置函数】
一、日期函数
函数名称 | 描述 |
---|---|
current_date() | 当前日期 |
current_time() | 当前时间 |
current_timestamp() | 当前时间截 |
date(datetine) | 返回datetine参数的日期部分 |
date_add(date, interval d_value_type) | 在date中添加日期或时间,interval后的数值单位可以是:year minutesecond,day |
date_sub(date, interval d_value_type) | 在date中减去日期或时间,interval后的数值单位可以是:year minutesecond,day |
datediff(datel, date2) | 两个日期的差,单位是天 |
now() | 当前日期时间 |
1. current_date()
这个函数用于获取当前的日期(不包含时间部分)。
示例:
sql
SELECT current_date();
输出结果类似于:2024-09-23
(注意:实际输出会根据当前日期变化)
2. current_time()
这个函数用于获取当前的时间(不包含日期部分)。
示例:
sql
SELECT current_time();
输出结果类似于:14:30:00
(注意:实际输出会根据当前时间变化)
3. current_timestamp()
这个函数用于获取当前的日期和时间(即时间戳)。
示例:
sql
SELECT current_timestamp();
输出结果类似于:2024-09-23 14:30:00
(注意:实际输出会根据当前日期和时间变化)
4. date(datetime)
这个函数接受一个datetime类型的参数,并返回其日期部分。
示例:
sql
SELECT date('2024-09-23 14:30:00') AS date_only;
输出结果类似于:2024-09-23
5. date_add(date, interval d_value_type)
这个函数在给定日期上增加指定的时间间隔。
示例:
sql
SELECT date_add('2024-09-23', INTERVAL 1 DAY) AS new_date;
输出结果类似于:2024-09-24
同样,可以添加不同单位的时间间隔,如月份、小时等:
sql
SELECT date_add('2024-09-23', INTERVAL 1 MONTH) AS new_date; -- 下一个月
SELECT date_add('2024-09-23 14:30:00', INTERVAL 2 HOUR) AS new_datetime; -- 时间增加2小时
6. date_sub(date, interval d_value_type)
这个函数在给定日期上减去指定的时间间隔。
示例:
sql
SELECT date_sub('2024-09-23', INTERVAL 1 DAY) AS new_date;
输出结果类似于:2024-09-22
同样,可以减去不同单位的时间间隔:
sql
SELECT date_sub('2024-09-23', INTERVAL 1 MONTH) AS new_date; -- 上一个月
SELECT date_sub('2024-09-23 14:30:00', INTERVAL 2 HOUR) AS new_datetime; -- 时间减少2小时
7. datediff(date1, date2)
这个函数返回两个日期之间的天数差。
示例:
sql
SELECT datediff('2024-09-23', '2024-09-20') AS days_diff;
输出结果类似于:3
(表示2024-09-23和2024-09-20之间相差3天)
8. now()
这个函数返回当前的日期和时间(类似于current_timestamp,但具体行为可能依赖于数据库的具体实现)。
示例:
sql
SELECT now();
输出结果类似于:2024-09-23 14:30:00
(注意:实际输出会根据当前日期和时间变化)
二、字符串函数
函数名称 | 描述 |
---|---|
charset (str) | 返回字符串字符集 |
concat (string2 [, ...]) | 连接字符串 |
instr (string, substring) | 返回substring在string中出现的位置,没有返回0 |
ucase (string2) | 转换成大写 |
lcase (string2) | 转换成小写 |
left (string2, length) | 从string2中的左边起取length个字符 |
length (string) | string的长度 |
replace (str, search_str, replace_str) | 在str中用replace_str替换search_str |
strcap(string1, string2) | 逐字符比较两字符串大小 |
substring(str, position [, length]) | 从str的position开始,取length个字符 |
ltrim(string) | 去除前空格 |
rtrim(string) | 去除后空格 |
trim(string) | 去除前空格或后空格 |
1. CONCAT(str1, str2, ...)
连接两个或多个字符串。
示例:
sql
SELECT CONCAT('Hello', ' ', 'World') AS concatenated_string;
输出结果:Hello World
2. INSTR(str, substr)
返回子串substr
在字符串str
中的位置(从1开始计数)。如果没有找到子串,则返回0。
示例:
sql
SELECT INSTR('Hello World', 'World') AS position;
输出结果:7
3. UCASE(str) 或 UPPER(str)
将字符串str
中的所有字母转换为大写。
示例:
sql
SELECT UCASE('Hello World') AS upper_case_string;
-- 或者
SELECT UPPER('Hello World') AS upper_case_string;
输出结果:HELLO WORLD
4. LCASE(str) 或 LOWER(str)
将字符串str
中的所有字母转换为小写。
示例:
sql
SELECT LCASE('HELLO WORLD') AS lower_case_string;
-- 或者
SELECT LOWER('HELLO WORLD') AS lower_case_string;
输出结果:hello world
5. LEFT(str, len)
返回字符串str
最左边的len
个字符。
示例:
sql
SELECT LEFT('Hello World', 5) AS left_part;
输出结果:Hello
6. LENGTH(str)
返回字符串str
的长度(以字节为单位,对于多字节字符集,长度可能不等于字符数)。
示例:
sql
SELECT LENGTH('Hello World') AS string_length;
输出结果:11
(假设使用单字节字符集)
7. REPLACE(str, from_str, to_str)
在字符串str
中用字符串to_str
替换所有的字符串from_str
。
示例:
sql
SELECT REPLACE('Hello World', 'World', 'MySQL') AS replaced_string;
输出结果:Hello MySQL
8. SUBSTRING(str, pos, len)
从字符串str
的pos
位置开始,取出len
个字符。如果省略len
,则返回从pos
开始到字符串末尾的所有字符。
示例:
sql
SELECT SUBSTRING('Hello World', 7, 5) AS substring_result;
-- 或者,省略len来获取剩余所有字符
SELECT SUBSTRING('Hello World', 7) AS substring_from_pos;
输出结果:
- 第一个查询:
World
- 第二个查询:
World
9. LTRIM(str)
去除字符串str
左侧的空格。
示例:
sql
SELECT LTRIM(' Hello World') AS ltrimmed_string;
输出结果:Hello World
10. RTRIM(str)
去除字符串str
右侧的空格。
示例:
sql
SELECT RTRIM('Hello World ') AS rtrimmed_string;
输出结果:Hello World
11. TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
去除字符串str
两侧的空格(或其他指定的字符remstr
)。默认是去除两侧的空格。
示例:
sql
SELECT TRIM(' Hello World ') AS trimmed_string;
-- 去除特定字符
SELECT TRIM(BOTH 'x' FROM 'xxxHello Worldxxx') AS trimmed_with_specific_char;
输出结果:
- 第一个查询:
Hello World
- 第二个查询:
Hello World
(假设去除的是空格,但这里是为了展示TRIM
函数的用法)
三、数学函数
函数名称 | 描述 |
---|---|
abs(number) | 绝对值函数 |
bin(decimal_number) | 十进制转换二进制 |
hex(decimalNumber) | 转换成十六进制 |
conv(number, from_base, to_base) | 进制转换 |
ceiling(number) | 向上去整 |
floor(number) | 向下去整 |
format(number, decimal_places) | 格式化,保留小数位数 |
rand() | 返回随机浮点数,范围[0.0,1.0) |
mod(number, denominator) | 取模,求余 |
1. abs(number) - 绝对值函数
sql
SELECT ABS(-123.45); -- 结果为 123.45
SELECT ABS(0); -- 结果为 0
SELECT ABS(123.45); -- 结果为 123.45
2. bin(decimal_number)- 十进制转换二进制
sql
SELECT BIN(10); -- 结果为 '1010'
SELECT BIN(0); -- 结果为 '0'
3. hex(decimalNumber)- 转换成十六进制
sql
SELECT HEX(255); -- 结果为 'FF'
SELECT HEX(0); -- 结果为 '0'
4. conv(number, from_base, to_base) - 进制转换
sql
SELECT CONV(15, 10, 2); -- 十进制15转换为二进制,结果为 '1111'
SELECT CONV('1A', 16, 2); -- 十六进制1A转换为二进制,结果为 '11010'
5. ceiling(number) - 向上去整
sql
SELECT CEILING(123.45); -- 结果为 124
SELECT CEILING(123.0); -- 结果为 123
SELECT CEILING(-123.45); -- 结果为 -123
6. floor(number) - 向下去整
sql
SELECT FLOOR(123.45); -- 结果为 123
SELECT FLOOR(123.0); -- 结果为 123
SELECT FLOOR(-123.45); -- 结果为 -124
7. format(number, decimal_places) - 格式化,保留小数位数
sql
SELECT FORMAT(12345.6789, 2); -- 结果为 '12,345.68'
SELECT FORMAT(123456789.123456, 4); -- 结果为 '123,456,789.1235'
注意:FORMAT
函数返回的是字符串,并且会根据当前MySQL服务器的地区设置(locale)来格式化数字(如千位分隔符)。
8. rand() - 返回随机浮点数
sql
SELECT RAND(); -- 每次调用都会返回不同的[0.0, 1.0)之间的随机数
9. mod(number, denominator) - 取模,求余
sql
SELECT MOD(10, 3); -- 结果为 1
SELECT MOD(10, -3); -- 结果取决于MySQL版本和设置,但通常是-2(在多数MySQL版本中)
SELECT MOD(-10, 3); -- 结果为 -1
SELECT MOD(-10, -3); -- 结果为 2
四、其它函数
1. 查询当前用户
sql
SELECT user();
这个命令用于显示当前连接到MySQL服务器的用户。
2. MD5摘要函数
sql
SELECT md5('admin');
该命令使用md5()
函数对字符串'admin'
进行MD5摘要处理,生成一个32位的十六进制字符串作为结果。示例输出为:
+----------------------------------+
| md5('admin') |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
3. 显示当前数据库
sql
SELECT database();
这个命令返回当前选中的数据库名称。
4. 密码加密函数
sql
SELECT password('root');
+-------------------------------------------+
| password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
5. IFNULL函数
- 当第一个参数非NULL时:
sql
SELECT ifnull('abc', '123');
这个命令检查'abc'
是否为NULL,因为它不是,所以返回'abc'
。
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc |
+----------------------+
- 当第一个参数为NULL时:
sql
SELECT ifnull(null, '123');
这个命令检查第一个参数是否为NULL,因为是,所以返回第二个参数'123'
。
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123 |
+---------------------+