SQL sever中函数(2)
目录
一、函数分类及应用
1.1标量函数(Scalar Functions):
1.1.1格式
1.1.2示例
1.1.3作用
1.2表值函数(Table-Valued Functions):
1.2.1内联表值函数(Inline Table-Valued Functions):
1.2.2多语句表值函数(Multi-Statement Table-Valued Functions):
1.2.3CLR表值函数(CLR Table-Valued Functions):
1.3系统函数(System Functions):
1.4聚合函数(Aggregate Functions):
二、函数作用
三、函数总结
3.1创建函数通用格式
3.2注意事项:
3.3调用函数的方式:
3.4函数可用于以下对象:
3.5函数与存储过程的区别:
3.6修改已创建函数里面内容的方法:
3.7验证函数的正确性:
3.8删除已创建的函数:
一、函数分类及应用
在SQL Server 2008中的函数可以根据其功能和用途进行分类。以下是SQL Server 2008中常见的函数分类:
1.1标量函数(Scalar Functions):
这种类型的函数接受零个或多个输入参数,并返回一个单一的值作为结果。标量函数可以用于计算、转换数据以及执行其他需要返回单个值的操作。
要创建标量函数,可以使用CREATE FUNCTION语句,并指定函数名、参数、返回值类型和函数体。
1.1.1格式
创建标量函数的具体格式如下:
CREATE FUNCTION [schema_name.]function_name
([@parameter1 data_type][@parameter2 data_type]...
)
RETURNS return_data_type
[WITH { ENCRYPTION | SCHEMABINDING | RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }]
[AS]
BEGIN-- Function body with SQL statementsRETURN expression
END
[schema_name.]function_name:函数名称,可以指定模式名称(可选)。@parameter1,@parameter2, ...:输入参数的名称和数据类型。return_data_type:返回值的数据类型。WITH { ENCRYPTION | SCHEMABINDING | RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }:可选项,用于指定函数的特性。AS:关键字,表示开始函数定义。-- Function body with SQL statements:SQL语句的函数体部分。RETURN expression:函数返回表达式。
注意:
标量函数是一种返回单个值的函数。因此,返回的数据类型必须与声明的
return_data_type匹配,且函数体内的SQL语句应该生成一个结果,并将其用作表达式返回。例如,可以执行计算、处理字符串等操作,并将最终结果返回。
1.1.2示例
下面是一些示例:
例1:GetFullName:将名字和姓氏合并成一个完整的姓名。
CREATE FUNCTION [dbo].[GetFullName]
(@FirstName VARCHAR(50),@LastName VARCHAR(50)
)
RETURNS VARCHAR(100)
AS
BEGINDECLARE @FullName VARCHAR(100)SET @FullName = @FirstName + ' ' + @LastNameRETURN @FullName
END
示例创建了一个名为GetFullName的标量函数,该函数接受两个字符串参数(@FirstName和@LastName),并返回这两个参数的拼接结果。函数体内部使用了变量和字符串操作来生成结果。
要调用标量函数,可以像调用任何其他函数一样使用SELECT语句或WHERE子句中的函数调用。下面是一个使用示例:
SELECT [dbo].[GetFullName]('John', 'Doe') AS FullName
示例调用了GetFullName函数,并将其返回的结果赋值给别名FullName。查询结果将显示"John Doe"。
例2:GetTotalSalesAmount:获取指定日期范围内的销售总额。
CREATE FUNCTION [dbo].[GetTotalSalesAmount]
(@StartDate DATE,@EndDate DATE
)
RETURNS MONEY
AS
BEGINDECLARE @TotalSales MONEYSELECT @TotalSales = SUM(SalesAmount)FROM SalesWHERE SaleDate >= @StartDate AND SaleDate <= @EndDateRETURN @TotalSales
END--创建表 Sales
CREATE TABLE Sales
(SaleID INT PRIMARY KEY,SaleDate DATE,SalesAmount MONEY
)--插入数据:
INSERT INTO Sales (SaleID, SaleDate, SalesAmount)
VALUES(1, '2022-01-05', 1000),(2, '2022-02-10', 1500),(3, '2022-03-15', 2000),(4, '2022-04-20', 1200)
用例:获取2022年第一季度(1月1日至3月31日)的销售总额。
SELECT dbo.GetTotalSalesAmount('2022-01-01', '2022-03-31') AS TotalSalesAmount
验证:输出结果为销售总额的金额,表示2022年第一季度的销售总额。
例3:CalculateDiscountedPrice:根据折扣率计算打折后的价格。
CREATE FUNCTION [dbo].[CalculateDiscountedPrice]
(@OriginalPrice MONEY,@DiscountRate FLOAT
)
RETURNS MONEY
AS
BEGINDECLARE @DiscountedPrice MONEYSET @DiscountedPrice = @OriginalPrice * @DiscountRateRETURN @DiscountedPrice
END
用例:计算原价1000元以85%的折扣率打折后的价格。
SELECT dbo.CalculateDiscountedPrice(1000, 0.85) AS DiscountedPrice
验证:输出结果为850,表示原价1000元以85%的折扣率打折后的价格为850元。
例4:IsAdult:判断一个人是否成年。
CREATE FUNCTION [dbo].[IsAdult]
(@BirthDate DATE
)
RETURNS BIT
AS
BEGINDECLARE @IsAdult BITIF DATEDIFF(YEAR, @BirthDate, GETDATE()) >= 18SET @IsAdult = 1ELSESET @IsAdult = 0RETURN @IsAdult
END
用例:判断1995年1月1日出生的人是否成年。
SELECT dbo.IsAdult('1995-01-01') AS IsAdult
验证:输出结果为1,表示1995年1月1日出生的人已经成年。
例5:GetOrderStatus:根据订单状态码返回对应的描述信息。
CREATE FUNCTION [dbo].[GetOrderStatus]
(@StatusCode INT
)
RETURNS VARCHAR(50)
AS
BEGINDECLARE @StatusDescription VARCHAR(50)SELECT @StatusDescription = DescriptionFROM OrderStatusWHERE StatusCode = @StatusCodeRETURN @StatusDescription
END--创建OrderStatus表:
CREATE TABLE OrderStatus
(StatusCode INT PRIMARY KEY,Description VARCHAR(50)
)--插入数据:
INSERT INTO OrderStatus (StatusCode, Description)
VALUES(1, 'Pending'),(2, 'Processing'),(3, 'Shipped'),(4, 'Delivered')
用例:根据订单状态码1获取对应的描述信息。
SELECT dbo.GetOrderStatus(1) AS OrderStatus
验证:输出结果为"Pending",表示订单状态码1对应的描述为"Pending"。
例6:CalculateSum的标量函数:输入两个整数参数,并返回它们的总和
CREATE FUNCTION dbo.CalculateSum
(@num1 INT,@num2 INT
)
RETURNS INT
AS
BEGINDECLARE @sum INTSET @sum = @num1 + @num2RETURN @sum
END
调用标量函数并检索其返回值,使用SELECT语句,如下所示:
SELECT dbo.CalculateSum(10, 5)
调用CalculateSum函数,传递参数10和5,并返回它们的总和作为结果:15
1.1.3作用
标量函数的作用主要包括:
- 执行简单的数学运算,如计算平方根、绝对值等。
- 将数据进行格式化,如日期时间转换、货币格式化等。
- 执行字符串操作,如拼接、分割等。
- 实现自定义逻辑,如业务规则验证、条件判断等。
- 对查询结果进行处理和转换,以满足特定的需求。
- 在查询中获取单个值,例如计算总和、计数等聚合操作。
1.2表值函数(Table-Valued Functions):
这种类型的函数返回一个表作为结果,可以被查询语句直接引用。表值函数可以返回单行、多行或者嵌套表。
有三种类型的表值函数可用于SQL Server 2008:
1.2.1内联表值函数(Inline Table-Valued Functions):
内联表值函数是嵌入在SELECT语句中的函数,它返回一个基于输入参数的表。内联表值函数在查询中以表达式的形式使用。
SQL Server 2008中创建和使用内联表值函数的格式:
①创建内联表值函数:
CREATE FUNCTION FunctionName
(@Parameter1 DataType,@Parameter2 DataType,...
)
RETURNS TABLE
AS
RETURN
(SELECT Column1, Column2, ...FROM TableNameWHERE Condition
)
FunctionName:自定义的函数名称。@Parameter1,@Parameter2, ...:输入参数的名称和数据类型。DataType:参数的数据类型。RETURNS TABLE:指定函数返回一个表。AS RETURN:指定返回的表结构和数据。
②使用内联表值函数:
SELECT *
FROM dbo.FunctionName(Parameter1, Parameter2, ...)
dbo.FunctionName:内联表值函数的名称和所属的模式。Parameter1,Parameter2, ...:传递给函数的参数值。
下面是一个示例,演示如何创建和使用内联表值函数:
--创建Sales1
CREATE TABLE Sales1
(ProductName VARCHAR(100),CategoryID INT,UnitPrice DECIMAL(10, 2),Quantity INT
)--插入数据
INSERT INTO Sales1 (ProductName, CategoryID, UnitPrice, Quantity)
VALUES('Product A', 1, 10.00, 5),('Product B', 1, 15.50, 8),('Product C', 2, 20.25, 3),('Product D', 3, 5.75, 10)SELECT * FROM Sales1--创建内联表值函数:
CREATE FUNCTION dbo.GetSalesByCategory
(@CategoryID INT
)
RETURNS TABLE
AS
RETURN
(SELECT ProductName, UnitPrice, QuantityFROM Sales1WHERE CategoryID = @CategoryID
)
使用内联表值函数查询指定类别的销售数据:
SELECT *
FROM dbo.GetSalesByCategory(1)
创建了名为dbo.GetSalesByCategory的内联表值函数,它接收一个@CategoryID参数,并返回满足指定类别ID的销售数据。然后,使用该函数来查询类别ID为1的销售数据。
1.2.2多语句表值函数(Multi-Statement Table-Valued Functions):
多语句表值函数包含多个T-SQL语句,并在最后使用INSERT语句将结果插入到一个表变量中。然后,该表变量作为函数的返回值。
以下是SQL Server 2008中创建和使用多语句表值函数的格式:
①创建多语句表值函数:
CREATE FUNCTION FunctionName
(@Parameter1 DataType,@Parameter2 DataType,...
)
RETURNS @TableVariable TABLE
(Column1 DataType,Column2 DataType,...
)
AS
BEGIN-- SQL statements to populate the table variableINSERT INTO @TableVariable (Column1, Column2, ...)SELECT Column1, Column2, ...FROM TableNameWHERE ConditionRETURN
END
FunctionName:自定义的函数名称。@Parameter1,@Parameter2, ...:输入参数的名称和数据类型。DataType:参数的数据类型。@TableVariable:表变量的名称,用于存储函数返回的结果集。Column1,Column2, ...:表变量中的列名和对应的数据类型。TableName:要查询的表名。Condition:筛选条件。
②使用多语句表值函数:
SELECT *
FROM dbo.FunctionName(Parameter1, Parameter2, ...)
dbo.FunctionName:多语句表值函数的名称和所属的模式。Parameter1,Parameter2, ...:传递给函数的参数值。
下面是一个示例,演示如何创建和使用多语句表值函数:
--创建Customers表:
CREATE TABLE Customers
(CustomerID INT PRIMARY KEY,CustomerName VARCHAR(100),OrderID INT,OrderAmount DECIMAL(10, 2)
)--插入数据:
INSERT INTO Customers (CustomerID, CustomerName, OrderID, OrderAmount)
VALUES(1, 'Customer A', 101, 1500.00),(2, 'Customer B', 102, 2000.00),(3, 'Customer C', 103, 1200.00),(4, 'Customer D', 104, 1800.00)SELECT * FROM Customers--创建多语句表值函数
CREATE FUNCTION dbo.GetHighValueCustomers
()
RETURNS @Customers TABLE
(CustomerID INT,CustomerName VARCHAR(100),TotalOrders INT
)
AS
BEGININSERT INTO @Customers (CustomerID, CustomerName, TotalOrders)SELECT CustomerID, CustomerName, COUNT(OrderID) AS TotalOrdersFROM CustomersWHERE OrderAmount > 1000GROUP BY CustomerID, CustomerNameRETURN
END
使用多语句表值函数查询订单金额大于1000的高价值客户:
SELECT *
FROM dbo.GetHighValueCustomers()
创建了名为dbo.GetHighValueCustomers的多语句表值函数,它不接收任何参数,并返回满足订单金额大于1000的高价值客户信息。函数内部使用INSERT语句将结果插入到名为@Customers的表变量中,并通过RETURN语句将表变量作为函数的返回值。
1.2.3CLR表值函数(CLR Table-Valued Functions):
CLR(Common Language Runtime)表值函数是一种特殊的函数类型,是使用公共语言运行时 (CLR) 编写的自定义函数,它允许开发人员使用.NET编程语言(如C#或VB.NET)编写自定义函数,并将其部署到SQL Server中作为表值函数使用。CLR表值函数提供更大的灵活性和复杂性,可以进行更高级的计算和数据处理操作。
以下是SQL Server 2008中创建和使用CLR表值函数的基本步骤:
①创建CLR表值函数的CLR集成程序集:
- 在Visual Studio中创建一个新的类库项目。
- 编写自定义函数的代码,并确保实现返回
IEnumerable<SqlDataRecord>接口以生成表值结果集。 - 将项目编译生成CLR集成程序集(.dll文件)。
②将CLR集成程序集部署到SQL Server中:
- 使用SQL Server Management Studio(SSMS)或其他方法,将CLR集成程序集安装到SQL Server中。
- 使用CREATE ASSEMBLY语句创建程序集,例如:
CREATE ASSEMBLY AssemblyName
FROM 'Path\To\Assembly.dll'
WITH PERMISSION_SET = SAFE;
③创建CLR表值函数:
- 使用CREATE FUNCTION语句创建CLR表值函数,指定函数名称、输入参数和返回表的结构,例如:
CREATE FUNCTION FunctionName
(@Parameter1 DataType,@Parameter2 DataType,...
)
RETURNS TABLE
AS EXTERNAL NAME AssemblyName.ClassName.MethodName;
FunctionName:自定义的函数名称。@Parameter1,@Parameter2, ...:输入参数的名称和数据类型。DataType:参数的数据类型。RETURNS TABLE:指定函数返回一个表。AS EXTERNAL NAME AssemblyName.ClassName.MethodName:指定CLR集成程序集、类名和方法名作为函数的实现。
④使用CLR表值函数:
- 使用SELECT语句调用CLR表值函数并从其返回的结果集中检索数据,例如:
SELECT *
FROM dbo.FunctionName(Parameter1, Parameter2, ...)
注意:
CLR表值函数需要具有CLR集成权限,并且对于安全性考虑,应该选择适当的权限级别(如SAFE)。
下面的一个示例是在SQL Server 2008中展示详细的CLR表值函数创建和使用的过程:
①创建CLR集成程序集:
-
在Visual Studio中创建一个新的类库项目。
-
编写自定义函数的代码,确保实现返回
IEnumerable<SqlDataRecord>接口以生成表值结果集。以下是一个简单的示例:
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;public class MyFunctions
{[SqlFunction(FillRowMethodName = "FillRow")]public static IEnumerable<SqlDataRecord> MyTableValuedFunction(){// Create metadata for the output tablevar recordMetadata = new SqlMetaData[]{new SqlMetaData("Column1", SqlDbType.Int),new SqlMetaData("Column2", SqlDbType.VarChar, 100)};// Create a list to hold the rows of the output tablevar rows = new List<SqlDataRecord>();// Create a new row and set its valuesvar row = new SqlDataRecord(recordMetadata);row.SetInt32(0, 1);row.SetString(1, "Value 1");rows.Add(row);// Add more rows if needed// Return the list of rowsreturn rows;}public static void FillRow(object obj, out SqlInt32 column1, out SqlString column2){// Implementation if neededthrow new NotImplementedException();}
}
-
编译项目以生成CLR集成程序集(.dll文件)。
②将CLR集成程序集部署到SQL Server中:
-
打开SQL Server Management Studio(SSMS)并连接到目标数据库。
-
使用CREATE ASSEMBLY语句创建CLR集成程序集,例如:
CREATE ASSEMBLY MyAssembly
FROM 'Path\To\MyAssembly.dll'
WITH PERMISSION_SET = SAFE;
③创建CLR表值函数:
-
使用CREATE FUNCTION语句创建CLR表值函数,指定函数名称、输入参数和返回表的结构,例如:
CREATE FUNCTION dbo.MyTableValuedFunction()
RETURNS TABLE
(Column1 INT,Column2 VARCHAR(100)
)
EXTERNAL NAME MyAssembly.[Namespace.ClassName].MyTableValuedFunction;
dbo.MyTableValuedFunction:自定义的函数名称和所属的模式。RETURNS TABLE:指定函数返回一个表。Column1,Column2:表的列名和对应的数据类型。EXTERNAL NAME MyAssembly.[Namespace.ClassName].MyTableValuedFunction:指定CLR集成程序集、类名和方法名作为函数的实现。
④使用CLR表值函数:
-
使用SELECT语句调用CLR表值函数,并从其返回的结果集中检索数据,例如:
SELECT *
FROM dbo.MyTableValuedFunction()
提示:
请确保在使用CLR表值函数时,已经将CLR集成程序集安装到了正确的数据库,并且具有适当的权限设置(如SAFE)。
1.3系统函数(System Functions):
SQL Server提供了许多内置的系统函数,用于执行各种任务,例如日期和时间处理、字符串操作、数学运算等。下面是一些常用的系统函数,并按照功能进行分类:
①日期和时间函数:
- GETDATE:返回当前的日期和时间。
- DATEPART:从日期或时间值中提取指定的部分,如年、月、日、小时、分钟等。
- DATEADD:向指定的日期或时间添加一个时间间隔。
- DATEDIFF:计算两个日期或时间之间的差异。
②字符串函数:
- LEN:返回一个字符串的长度。
- SUBSTRING:从字符串中获取子字符串。
- CONCAT:将多个字符串连接成一个字符串。
- REPLACE:替换字符串中的子字符串。
③数学函数:
- ROUND:将数值四舍五入到指定的位数。
- ABS:返回一个数的绝对值。
- POWER:计算一个数的指定次幂。
- SQRT:计算一个数的平方根。
④聚合函数:
- SUM:计算某一列的总和。
- AVG:计算某一列的平均值。
- COUNT:计算某一列的行数。
- MAX:计算某一列的最大值。
- MIN:计算某一列的最小值。
⑤类型转换函数:
- CAST:将一个表达式转换为指定的数据类型。
- CONVERT:将一个表达式转换为指定的数据类型。
- ISNULL:如果表达式为空,则返回替代值。
以下是SQL Server 2008中常见的系统函数:
①GETDATE:返回当前的日期和时间。
用例:获取当前日期和时间。
SELECT GETDATE() AS CurrentDateTime
验证:输出结果为当前的日期和时间。
②DATEPART:从日期或时间值中提取指定的部分,如年、月、日、小时、分钟等。
用例:从日期中提取年份。
SELECT DATEPART(YEAR, '2022-09-15') AS Year
验证:输出结果为2022,即从日期'2022-09-15'中提取的年份。
③LEN:返回一个字符串的长度。
用例:获取一个字符串的长度。
SELECT LEN('Hello World') AS StringLength
验证:输出结果为11,表示字符串'Hello World'的长度为11。

④SUBSTRING:从字符串中获取子字符串。
用例:获取指定位置处的字符子串。
SELECT SUBSTRING('Hello World', 7, 5) AS Substring
验证:输出结果为World,即从字符串'Hello World'的第7个字符开始提取5个字符。

1.4聚合函数(Aggregate Functions):
聚合函数对一组值进行计算,并返回单个值作为结果。常见的聚合函数包括SUM、AVG、COUNT、MIN和MAX等。
二、函数作用
函数的作用可以有很多,例如:
- 封装复杂的业务逻辑,使其可以在不同的查询中重复使用。
- 提高查询性能,通过将一些计算逻辑放到函数中,减少主查询的复杂度。
- 简化查询语句,通过函数调用实现更简洁、可读性更好的代码。
- 实现自定义数据转换和处理逻辑,满足特定需求。
- 执行数据验证和格式化等任务,确保数据的正确性和一致性。
三、函数总结
3.1创建函数通用格式
CREATE FUNCTION [schema_name.]function_name
([@parameter1 data_type][@parameter2 data_type]...
)
RETURNS return_data_type
[WITH { ENCRYPTION | SCHEMABINDING | RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }]
[AS]
BEGIN-- Function body with SQL statementsRETURN expression
END
[schema_name.]function_name:函数名称,可以指定模式名称(可选)。@parameter1,@parameter2, ...:输入参数的名称和数据类型。return_data_type:返回值的数据类型。WITH { ENCRYPTION | SCHEMABINDING | RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }:可选项,用于指定函数的特性。AS:关键字,表示开始函数定义。-- Function body with SQL statements:SQL语句的函数体部分。RETURN expression:函数返回表达式。
3.2注意事项:
- 函数名称必须是唯一的,并且符合标识符的规则。
- 输入参数可以有多个,但每个参数必须具有唯一的名称。
- 返回值的数据类型必须与声明的
return_data_type匹配。 - 函数体内可以包含各种SQL语句,例如SELECT、INSERT、UPDATE等。
- 函数可以包含控制流程语句(如IF、WHILE)和变量声明。
3.3调用函数的方式:
- 使用SELECT语句调用函数并检索其返回的值,例如:
SELECT dbo.MyFunction(parameter1, parameter2, ...)
3.4函数可用于以下对象:
- SELECT语句的列列表。
- WHERE、HAVING和JOIN子句的条件。
- COMPUTED列的公式。
- 触发器的操作。
3.5函数与存储过程的区别:
- 函数返回一个单个值,而存储过程可以执行多个操作并不返回值。
- 函数可以嵌套在其他查询或表达式中,而存储过程通常作为独立的代码块执行。
- 存储过程可以修改数据库中的数据,而函数通常只用于查询和计算。
3.6修改已创建函数里面内容的方法:
- 使用ALTER FUNCTION语句来修改已创建函数的定义,例如:
ALTER FUNCTION [schema_name.]function_name
([@parameter1 data_type][@parameter2 data_type]...
)
RETURNS return_data_type
[WITH { ENCRYPTION | SCHEMABINDING | RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }]
[AS]
BEGIN-- Updated function body with SQL statementsRETURN expression
END
3.7验证函数的正确性:
- 可以使用SELECT语句调用函数,并检查返回的结果是否符合预期。
3.8删除已创建的函数:
- 使用DROP FUNCTION语句删除已创建的函数,例如:
DROP FUNCTION [schema_name.]function_name
注意:
在删除函数之前,请确保您不再需要该函数,并且没有任何依赖该函数的对象。
相关文章:
SQL sever中函数(2)
目录 一、函数分类及应用 1.1标量函数(Scalar Functions): 1.1.1格式 1.1.2示例 1.1.3作用 1.2表值函数(Table-Valued Functions): 1.2.1内联表值函数(Inline Table-Valued Functions&am…...
win10专业版驱动开发
我使用的系统版本如何下: 使用的visual studio为VS2019,使用的SDK,WDK如下: 在visual studio单个组件里选择SDK10.0.018362.0 在WDK里面选择版本为: 下载链接如下: 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Le…...
【JavaEE】网络编程---TCP数据报套接字编程
一、TCP数据报套接字编程 1.1 ServerSocket API ServerSocket 是创建TCP服务端Socket的API ServerSocket 构造方法: ServerSocket 方法: 1.2 Socket API Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法&…...
用 Go 访问 MySql 数据库
所有代码样例 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )var db *sql.DB// 初始化连接 func initDB() (err error) {db, err sql.Open("mysql", "root:mm..1213tcp(127.0.0.1:3306)/chapte…...
mac 升级node到指定版本
node版本14.15.1升级到最新稳定版18.18.2 mac系统 先查看一下自己的node版本 node -v开始升级 第一步 清除node的缓存 sudo npm cache clean -f第二步 安装n模块【管理模块 n是管理 nodejs版本】 sudo npm install -g n第三步升级node sudo n stable // 把当前系统的 Node…...
欢迎进QQ群讨论交流
...
C语言解决八皇后问题
八皇后问题是指在一个88的棋盘上,放置8个皇后,使得任意两个皇后都不能在同一行、同一列或同一斜线上。这是一个著名的递归问题。下面是一个C语言实现八皇后问题的代码,以及对代码的讲解。 #include <stdio.h>int board[8][8] {0}; //…...
springboot集成canal,将数据发送至接口
前置条件: mysql开启binlog日志部署canal服务 Springboot代码: 接口工具类: import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; imp…...
Selenum八种常用定位(案例解析)
Selenium是一个备受推崇的工具。它有着丰富的功能,让我们能够与网页互动,执行各种任务,能为测试工程师和开发人员提供了很大的便利。 要充分利用Selenium,就需要了解如何正确定位网页上的元素。 接下来我将带大家共同探讨Seleni…...
Web前端接入Microsoft Azure AI文本翻译
Azure 文本翻译是 Azure AI 翻译服务的一项基于云的 REST API 功能。 文本翻译 API 支持实时快速准确地进行源到目标文本翻译。 文本翻译软件开发工具包 (SDK) 是一组库和工具,可用于轻松地将文本翻译 REST API 功能集成到应用程序中。 文本翻译 SDK 可跨 C#/.NET、…...
容联七陌助力鱼跃医疗升级智能联络中心,让客户服务更“鱼跃”
在当今高度竞争的市场环境中,企业的客户服务质量对于维护品牌形象和保持竞争优势至关重要。而随着人工智能、大数据等技术快速发展,智能化客户服务正在成为各行各业发展的重要部分。 鱼跃医疗是一家致力于“用科技律动生命"的国内知名医疗制造企业…...
【Redis系列】在Centos7上安装Redis5.0保姆级教程!
哈喽, 大家好,我是小浪。那么最近也是在忙秋招,很长一段时间没有更新文章啦,最近呢也是秋招闲下来,当然秋招结果也不是很理想,嗯……这里就不多说啦,回归正题,从今天开始我们就开始正…...
线性代数-Python-03:矩阵的变换 - 手写Matrix Transformation及numpy中的用法
文章目录 一、代码仓库二、旋转矩阵的推导及图形学中的矩阵变换2.1 让横坐标扩大a倍,纵坐标扩大b倍2.2 关于x轴翻转2.3 关于y轴翻转2.4 关于原点翻转(x轴,y轴均翻转)2.5 沿x方向错切2.6 沿y方向错切2.7 旋转2.8 单位矩阵2.9 矩阵的…...
【单片机基础】按键状态机实现短按、长按、双击、三击和N击
下载地址: 【CSDNNaiva】源码:HK32F030M-按键扫描-短按长按检测【CSDNNaiva】源码:HK32F030M-ADC-EXTI-TM1624-USART-EEPROM-TiMBase-按键长按(231024) 参考资料 [1] 【CSDNPillarPeng】【按键】[独立按键] - 1: 单击,…...
Ubuntu虚拟机部署OpenStack
1、部署环境 系统:ubuntu-22.04.3-desktop-amd64DevStack版本:2024.1VMware Workstation:8G内存、4核处理器、100G硬盘/1、网络NAT模式/1 2、Ubuntu环境设置 点击show applications,选择Software&Updates 跟换Ubuntu的镜像…...
ES在企业项目中的实战总结,彻底掌握ES的使用
通过之前两篇文章 了解了ES的核心概念和基础使用学习进阶的DSL语法处理复杂的查询 这段时间通过在本企业代码中对ES框架的使用,总结了不少经验。主要分为三点 企业封装了ES原生的api,需要使用企业项目提供的接口实现 -------简单使用(本章节目…...
QT的Qporcess功能的使用
具体实现代码如下: #include <QProgressBar>//必须要包含的头文件 #include <QProcess>// 创建一个QProgressBar对象QProgressBar *progressBar new QProgressBar(this);QProcess *proces;process_shownew process;// 设置进度条的最小值和最大值prog…...
【图灵诸葛】jvm笔记
2023年10月23日14:04:44 jvm 1.jdk体系结构图回顾(Av333129672,P1) jdk jre 底层是hotspot jvm 2.java虚拟机内部组成(Av333129672,P2) 堆 方法区 执行引擎 类加载 本地方法栈 线程栈(虚拟机栈) 3.java虚拟机栈讲解(Av333129672,P3) 程序计数器…...
数据安全小课堂开讲啦!看这里!
数据安全小课堂开讲啦!看这里! 1、什么是数据? 《数据安全法》第三条明确,本法所称的数据,就是指任何以电子或者其他方式对信息的记录。小到个人使用手机、电脑等电子产品时浏览的网页、下载的应用、存储的文件&…...
单片机矩阵键盘
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是矩阵键盘?1.独立键盘2.矩阵键盘变化1变化2变化3 3. 通过变型,举一反三,就可以实现4*4的矩阵键盘扫描 二、使用步骤…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
