「MySQL」深入理解MySQL中常用的SQL函数
- 窗口函数参考文章
- 1. COALESCE 函数
- 2. USING 函数
- 3. LEAD 函数
- 4. interval 函数
- 5. INSTR 函数
- 6. substring_index 函数
- 7. LENGTH 函数和 CHAR_LENGTH 函数
窗口函数参考文章
SQL窗口函数
1. COALESCE 函数
COALESCE 函数的作用是从一组值中返回第一个非空(NULL)的值。如果所有的值都是 NULL,那么 COALESCE 函数会返回 NULL。
举个例子,如果我们有一个表格包含了学生的姓名和昵称,但有些学生没有昵称,我们可以使用 COALESCE 函数来选择一个非空的名字作为显示的名称:
SELECT COALESCE(nickname, name) AS display_name
FROM students;
在这个例子中,如果 nickname 字段不为空,那么 display_name 将会使用昵称;如果 nickname 字段为空,那么 display_name 将会使用姓名。
2. USING 函数
在 SQL 中,可以使用 USING 关键字来指定连接操作的列。当使用 JOIN 操作连接两个表时,如果这两个表中的连接列具有相同的名称,可以使用 USING 关键字来简化连接条件的书写。
以下是使用 USING 关键字进行连接操作的示例:
SELECT *
FROM table1
JOIN table2 USING (common_column);
在上面的示例中,table1 和 table2 是要连接的两个表,它们都具有一个名为 common_column 的列。使用 USING 关键字,可以省略连接条件的重复列名,系统会自动匹配这两个表中具有相同名称的列进行连接,不能指定多个列。
3. LEAD 函数
LEAD() 是一种窗口函数,用于获取当前行之后的行的值。它可以帮助你在查询中访问结果集中下一个行的数据,而无需实际改变结果集的顺序。
以下是 LEAD() 函数的基本语法:
LEAD(expression, offset, default) OVER (PARTITION BY partition_column ORDER BY order_column)
expression: 要获取的值的列或表达式。offset: 指定要获取的后续行的偏移量(默认为 1,表示下一行)。default: 可选参数,指定当没有后续行时要返回的默认值(如果不提供,则默认为NULL)。PARTITION BY partition_column: 可选子句,用于对结果集进行分区。ORDER BY order_column: 指定确定行之间顺序的列。
通过使用 LEAD() 函数,你可以轻松地访问结果集中当前行之后的行的数据,从而执行各种分析和计算操作。在之前的示例中,我展示了如何在查询中使用 LEAD() 函数来获取用户的下一个刷题日期。
4. interval 函数
在SQL中,INTERVAL 5 MINUTE表示一个时间间隔,具体意思是“5分钟”。这个用法通常用于在SQL语句中对时间进行加减操作,比如计算时间差、增加时间等。
例如,在MySQL中,你可以使用INTERVAL关键字来对时间进行加减操作。下面是一个示例:
SELECT NOW() AS current_time,NOW() + INTERVAL 5 MINUTE AS after_5_minutes;
这个查询会返回当前时间以及加上5分钟后的时间。INTERVAL 5 MINUTE表示增加5分钟。
5. INSTR 函数
INSTR 函数是 SQL 中用来查找字符串中子串的函数。它的语法如下:
INSTR(string, substring)
其中,string 是要查找的字符串,substring 是要查找的子串。函数返回 substring 在 string 中第一次出现的位置,如果 substring 不在 string 中,则返回 0。
以下是一个示例:
SELECT INSTR('hello world', 'world');
这个查询会返回 7,因为子串 'world' 在字符串 'hello world' 中第一次出现的位置是 7。
在你的例子中,INSTR(comment,'是')+INSTR(comment,'试')+INSTR(comment,'报名') > 0 的含义是,如果 comment 字符串中包含子串 '是'、'试' 或 '报名' 中的任意一个,那么该表达式的值就为真(即大于0)。
6. substring_index 函数
SUBSTRING_INDEX 函数用于在字符串中查找并返回某个分隔符之前或之后的子串。该函数的语法如下:
SUBSTRING_INDEX(str, delim, count)
str是要进行处理的字符串。delim是用作分隔符的字符或子串。count指定了要返回的子串在分隔符出现的次数。如果count为正数,函数将从左侧开始查找;如果count为负数,函数将从右侧开始查找。
例如,如果有字符串 'apple,banana,cherry',想要获取逗号后的第一个内容 'banana',可以使用以下 SQL 查询:
SELECT SUBSTRING_INDEX('apple,banana,cherry', ',', -1) AS result;
这个查询将返回 'banana',因为它是逗号后的第一个内容。
7. LENGTH 函数和 CHAR_LENGTH 函数
在 SQL 中,LENGTH 函数和 CHAR_LENGTH 函数用于获取字符串的长度,但它们之间有一些区别。
-
LENGTH函数:LENGTH函数返回字符串中的字符数或字节数,取决于数据库的字符集编码。- 对于英文字符或单字节字符集,
LENGTH函数返回字符串中的字符数。 - 对于多字节字符集(如 UTF-8),
LENGTH函数返回字符串中的字节数,而不是字符数。
-
CHAR_LENGTH函数:CHAR_LENGTH函数返回字符串中的字符数,不受字符集编码的影响。- 无论是单字节字符集还是多字节字符集,
CHAR_LENGTH函数都会返回字符串中的字符数。
例如,假设有一个包含中文字符的字符串 '你好,世界!',如果使用 LENGTH 和 CHAR_LENGTH 函数来获取其长度,结果可能如下:
SELECT LENGTH('你好,世界!') AS length_result, CHAR_LENGTH('你好,世界!') AS char_length_result;
在这个例子中,length_result 的值取决于数据库的字符集编码,而 char_length_result 的值将始终是 6,因为字符串中有 6 个字符。