MySQL(9)【内置函数】

阅读导航

  • 引言
  • 一、日期函数
    • [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)

从字符串strpos位置开始,取出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                 |
+---------------------+
相关推荐
朴拙数科26 分钟前
mysql报错解决 `1525 - Incorrect DATETIME value: ‘0000-00-00 00:00:00‘`
android·数据库·mysql
索然无味io1 小时前
SQL注入--Access注入
数据库·笔记·sql·学习·mysql·网络安全
寂然如故1 小时前
单片机的选择因素
数据库·mongodb
bjzhang752 小时前
若依微服务中配置 MySQL + DM 多数据源
mysql·多数据源·若依·dm数据库
1登峰造极2 小时前
scroll-view 实现滑动显示,确保超出正常显示,小程序app,h5兼容
android·小程序
刘争Stanley2 小时前
Android 15(V)新功能适配,雕琢移动细节之美
android·kotlin·android 15·android v
Light602 小时前
从混沌到清晰:全面解析非结构化数据治理!
数据库·数据挖掘·数据安全·数据资产·非结构化数据
小狗爱世界2 小时前
深入解析Binder源码
android·binder
qq_214670352 小时前
android 聊天界面键盘、表情切换丝滑
android·gitee
浩浩测试一下2 小时前
渗透测试之SQLMAP工具详解 kali自带SQLmap解释 重点sqlmap --tamper 使用方式详解 搞完你就很nice了
数据库·安全·web安全·网络安全·系统安全·安全架构