SQL 常用函数总结(二)

news/2024/12/22 12:50:18/

字符串处理函数

1. CONCAT()

函数功能:将两个或多个字符串合并成一个字符串。

函数语法:

CONCAT(string1, string2, ...)

string1string2 等的数量可以是零个或多个,分别表示需要合并的字符串。

使用示例:

假设现在有一个名为 employees 的表格,其中包含员工的名字(first_namelast_name),需要将它们合并为一个字段(full_name)。

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

输出:

+---------------------+
|      full_name      |
+---------------------+
|      John Smith     |
|    Barbara Johnson  |
|      Mark Davis     |
+---------------------+

此示例使用了 CONCAT() 函数将 first_namelast_name 合并为一个名为 full_name 的新字段,并在两个字符串之间添加一个空格。

2. SUBSTRING()

函数功能:用于从字符串中提取子字符串。

函数语法:

SUBSTRING(string, start_position, length)

string 表示需要从中提取字符的字符串,start_position 表示子字符串在原始字符串中的起始位置(从 1 开始),length (可选) 表示需要提取的字符数。

如果省略 length 参数,则会提取从 start_position 开始的所有字符。

使用示例:

假设现在有一个名为 students 的表格,其中包含学生的姓名(name),需要从姓名字段中提取出每个学生的姓氏。

SELECT SUBSTRING(name, 1, 3) AS last_name FROM students;

输出:

+-----------+
| last_name |
+-----------+
|  Li       |
|  Wang     |
|  Zhang    |
+-----------+

此示例使用了 SUBSTRING() 函数从 name 字段中提取每个学生的姓氏,并将其作为新的 last_name 字段输出。

3. LOWER()UPPER()

LOWER() 函数用于将字符串中的所有字母转换为小写字母。UPPER() 函数用于将字符串中的所有字母转换为大写字母。

函数语法:

LOWER(string)
UPPER(string)

string 表示需要转换的字符串。

使用示例:

假设现在有一个名为 users 的表格,其中包含用户的名字(name),需要将它们转换为小写。

SELECT LOWER(name) AS lowercase_name FROM users;

输出:

+-----------------------+
|    lowercase_name     |
+-----------------------+
|       john smith      |
|     barbara johnson   |
|       mark davis      |
+-----------------------+

此示例使用了 LOWER() 函数将 name 中的所有字符转换为小写,并将结果存储在名为 lowercase_name 的新字段中。

4. LEFT()RIGHT()

函数功能:从左侧或右侧提取字符串中的字符。

函数语法:

LEFT(string, length)
RIGHT(string, length)

string 表示需要提取字符的字符串,length 表示从字符串左边或右边提取的字符数量。

使用示例:

假设现在有一个名为 books 的表格,其中包含书的标题(title),需要提取它们的前三个字符以及最后三个字符。

SELECT LEFT(title, 3) AS beginning, RIGHT(title, 3) AS end FROM books;

输出:

+-----------+--------+
| beginning |  end   |
+-----------+--------+
|   The     | man.   |
|   Mak     | must.  |
|   Pra     | be.    |
+-----------+--------+

此示例使用了 LEFT() 函数提取每个书的标题前三个字符,并使用 RIGHT() 函数提取标题的最后三个字符,并将它们分别存储在由 beginningend 组成的新字段中。

5. REVERSE()

函数功能:将一个字符串反转。

函数语法:

REVERSE(string)

string 表示需要反转的字符串。

使用示例:

假设现在有一个名为 words 的表格,其中包含单词(word),需要将它们反转。

SELECT REVERSE(word) AS reversed_word FROM words;

输出:

+------------------+
|  reversed_word   |
+------------------+
|       gninrom    |
|       raebdnas   |
|       loopkcalb  |
+------------------+

此示例使用了 REVERSE() 函数将每个单词反转,并将结果存储在名为 reversed_word 的新字段中。

6. LIKE

函数功能:用于在 WHERE 子句中筛选特定模式的数据。

函数语法:

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern

column_name 表示需要搜索的列名,table_name 表示需要搜索的表格名,pattern 表示需要匹配的模式,模式可以包括百分号(%)和下划线(_)。

% 表示匹配零个或多个字符。例如,“ %s” 会匹配以“s”结尾的任何字符串,例如“dogs”、“cats”、“bats”等。

_ 表示匹配一个字符。例如,“__a%” 会匹配长度为至少三个字符且以“a”作为第三个字符的任何字符串,如“lava”、“wava”、“mamma”、“papa”等。

使用示例:

假设现在有一个名为 products 的表格,其中包含产品的名称(product_name)和是否存在缺货的布尔值(out_of_stock),需要找出所有名称以“car”开头且没有缺货的产品。

SELECT product_name FROM products WHERE product_name LIKE 'car%' AND out_of_stock = 0;

输出:

+------------------+
|   product_name   |
+------------------+
|    Car Charger   |
|   Car Accessories|
+------------------+

此示例使用了 LIKE 运算符,以“car%”作为模式筛选出产品名称以“car”开头的记录,以及一个布尔条件筛选出没有缺货的产品。

7. LENGTH()

函数功能:返回字符串的长度(字符数)。

函数语法:

LENGTH(string)

string 表示需要计算长度的字符串。

使用示例:

假设现在有一个名为 messages 的表格,其中包含一些电子邮件消息(message),需要计算它们的长度。

SELECT LENGTH(message) AS message_length FROM messages;

输出:

+-----------------+
| message_length  |
+-----------------+
|        234      |
|        150      |
|        442      |
|        97       |
+-----------------+

此示例使用了 LENGTH() 函数计算每个邮件消息的长度,并将结果存储在名为 message_length 的新字段中。

8. TRIM()

函数功能:用于删除字符串开头和结尾的空格或其他指定字符。

函数语法:

TRIM( [ [ BINARY ] [ LEADING | TRAILING | BOTH ] [ characters ] FROM ] string )

string 表示需要修剪的字符串,BINARY 表示该函数将针对二进制字符串进行操作,LEADING 表示仅在字符串开头删除字符,TRAILING 表示仅在字符串结尾删除字符,BOTH 表示在字符串开头和结尾都删除字符, characters 表示需要删除的字符或字符序列。

如果省略 characters 参数,则默认删除空格。

使用示例:

假设现在有一个名为 customers 的表格,其中包含客户的名称(name),需要删除在名字开头和结尾的空格。

SELECT TRIM(name) AS trimmed_name FROM customers;

输出:

+---------------------+
|     trimmed_name    |
+---------------------+
|       John Smith    |
|     Barbara Johnson |
|       Mark Davis    |
+---------------------+

此示例使用了 TRIM() 函数删除每个客户姓名开头和结尾的空格,并将结果存储在名为 trimmed_name 的新字段中。

9. REPLACE()

函数功能:用一个字符串替换另一个字符串。

函数语法:

REPLACE(string, old_string, new_string)

string 表示需要执行替换操作的字符串,old_string 表示需要被替换的子字符串,new_string 表示用于替换的新字符串。

使用示例:

假设现在有一个名为 sentences 的表格,其中包含一些句子(sentence),需要将其中每个单词“the”替换为“a”。

SELECT REPLACE(sentence, 'the', 'a') AS new_sentence FROM sentences;

输出:

+-----------------------------+
|          new_sentence        |
+-----------------------------+
|    A quick brown fox jumps   |
|    over a lazy dog.          |
|    A stitch in time saves a  |
|    nine.                     |
+-----------------------------+

此示例使用了 REPLACE() 函数替换每个句子中的单词“the”,并将替换后的新句子存储在名为 new_sentence 的新字段中。

10. LOCATE()

LOCATE() 函数用于在指定字符串中查找子字符串,并返回它在字符串中的起始位置。它的语法格式为:

LOCATE(substring, string, position)

其中,substring 表示需要查找的子字符串,string 表示被查找的原始字符串,position 表示查找的起始位置。

  • 如果找到了子字符串,则返回它在原始字符串中的起始位置,如果没有找到,则返回 0。
  • 如果省略 position 参数,则从字符串开始查找子字符串。

以下是一个 LOCATE() 函数的示例:

假设有如下的 SQL 语句:

SELECT LOCATE('cd', 'abcdefg') AS position;

执行上述语句的结果应该为:

+----------+
| position |
+----------+
|       3  |
+----------+

在该示例中,LOCATE() 函数依次传入子字符串 'cd' 和原始字符串 'abcdefg',并查找 'cd' 是否在 'abcdefg' 中出现。由于 'cd' 并不在 'abcdefg' 中出现,因此 LOCATE() 函数返回 0。

下面我们再看一个更真实的示例。假设有如下的 products 表格:

idproduct_nameprice
1iPhone 13 - Jet Black1000
2Galaxy S21 - Phantom900
3Macbook Air - Silver1200

现在我们想要分别提取 product_name 中的产品名称和颜色信息。我们可以使用 LOCATE() 函数和 SUBSTRING() 函数来实现:

SELECT SUBSTRING(product_name, 1, LOCATE(' - ', product_name)-1) AS product, 
SUBSTRING(product_name, LOCATE(' - ', product_name) + 3) AS color 
FROM products;

上述 SQL 语句将 product_name 字段分别以 ' - ' 为分隔符,提取出产品名称和颜色信息,并使用 SUBSTRING() 函数来去掉相应的分隔符。LOCATE() 函数返回分隔符在 product_name 中的起始位置,从而帮助 SUBSTRING() 函数正确提取相应的信息。执行上述 SQL 语句的结果如下:

productcolor
iPhone 13Jet Black
Galaxy S21Phantom
Macbook AirSilver

在上述结果中,产品名称和颜色信息已经正确分隔出来,并以不同的列分别显示。


http://www.ppmy.cn/news/70454.html

相关文章

软件测试工程师的职业发展方向

一、软件测试工程师大致有4个发展方向: 1 资深软件测试工程师 一般情况,软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。 达到这个水平比较困难,这需要了解很多知识,例如C语言,JAVA语言&#xff0c…

多尺度样本熵

多尺度样本熵及其MATLAB实现方法 随着人们对信号处理技术的不断深入研究和发展,在信号非线性、非高斯的情况下,熵的概念成为一种很重要的测量信号复杂度的度量方式。多尺度熵是指在多个尺度范围内测量信号复杂度的一种方法。本文将介绍多尺度样本熵的概…

什么是前端宏任务,什么又是前端微任务呢?一文读懂前端微任务宏任务。

在前端中,宏任务和微任务是异步任务的两种不同类型。 前端有很多中异步任务类型。 可以分为三类: 宏任务 定时器任务用户交互事件任务(鼠标事件、键盘事件)网络请求任务I/O操作任务(读写文件) 微任务 Pro…

TPC 网络通信基础(二)

文件下载利用 tcp原理 Ubuntu 20.04 python3.7 三个python文件 客户端.py 服务器.py 文件.py 客户端充当用户 服务器充当提供下载的服务端 客户端代码: import socketdef main():# 创建套接字tcp_socket socket.socket(socket.AF_INET,socket.SOCKET_…

String StringBuilder常用方法总结

在java中String类不可变的,创建一个String对象后不能更改它的值。所以如果需要对原字符串进行一些改动操作,就需要用StringBuilder类或者StringBuffer类,StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的&…

JAVA面试-语法基础- A01

语法基础 面向对象封装继承多态 面向对象 面向对象特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分隔的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外的接口…

前端通信-服务端发送事件: SSE(Server-Sent Events)

在日常开发中,我们经常会遇到需要实时获取数据的情况,之前实现这种相似的功能通常都是用ajax长轮询,在HTML5规范中定义了新的通信方式,WebSocket和SSE。websocket相对SSE更常用一些,本文着重来介绍SSE的应用。 SSE AP…

滨州申请专利需要准备哪些材料?

如果你想保护你的一些发明和设计,你可以申请专利。申请专利时,需要提前了解程序和相关流程。那么,申请专利需要准备哪些材料呢?让我们一起仔细看看。 首先,申请专利需要准备哪些材料? (1)外观专利&#xff…