SQL Server函数类型分类及差异咨询(SQL新手入门)
嘿,作为SQL新手完全不用慌!SQL Server里的函数其实分类很清晰,我帮你拆解清楚每个类型的作用和它们之间的核心差异:
SQL Server 函数类型及核心差异
1. 标量函数(Scalar Functions)
这类函数是最常用的,核心特点是返回单个值(可以是字符串、数字、日期等任意数据类型)。既可以用SQL Server内置的,也能自己定义符合业务需求的标量函数。
- 内置例子:
LEN('Hello SQL')(返回字符串长度)、UPPER('hello')(转大写)、GETDATE()(获取当前时间) - 自定义例子:比如写一个计算年龄的函数:
CREATE FUNCTION dbo.CalculateAge(@BirthDate DATE) RETURNS INT AS BEGIN RETURN DATEDIFF(year, @BirthDate, GETDATE()) END
- 适用场景:SELECT列表、WHERE条件、变量赋值里都能用。
2. 表值函数(Table-Valued Functions)
和标量函数不同,这类函数返回的是一个完整的结果集(类似一张临时表),又分为两种:
内联表值函数
本质上就是带参数的视图,逻辑简单,性能和视图接近:
CREATE FUNCTION dbo.GetCustomerOrders(@CustomerID INT) RETURNS TABLE AS RETURN ( SELECT OrderID, OrderDate, Amount FROM Orders WHERE CustomerID = @CustomerID )
调用方式:SELECT * FROM dbo.GetCustomerOrders(101)
多语句表值函数
可以包含复杂的逻辑(比如循环、条件判断),先定义一个表变量,再往里面插入数据后返回:
CREATE FUNCTION dbo.GetRecentOrders(@Days INT) RETURNS @Orders TABLE (OrderID INT, OrderDate DATE) AS BEGIN INSERT INTO @Orders SELECT OrderID, OrderDate FROM Orders WHERE DATEDIFF(day, OrderDate, GETDATE()) <= @Days RETURN END
- 核心差异:内联表值函数性能更好,SQL Server会把它和外部查询合并优化;多语句表值函数灵活性更高,但性能通常不如内联。
3. 聚合函数(Aggregate Functions)
这类函数专门用来对一组数据进行计算,返回单个汇总值,必须配合GROUP BY(除非是对全表汇总)使用。
- 常用例子:
SUM(Amount)(求和)、COUNT(*)(统计行数)、AVG(Price)(平均值)、MAX(OrderDate)(取最大值) - 例子用法:
SELECT CustomerID, SUM(Amount) AS TotalSpent FROM Orders GROUP BY CustomerID HAVING SUM(Amount) > 1000
4. 系统函数(System Functions)
这是SQL Server内置的工具类函数,用来获取系统信息、处理数据类型转换、操作系统对象等。很多系统函数其实属于标量函数的子集,但专门服务于系统级操作:
- 例子:
CAST('2024-01-01' AS DATE)(数据类型转换)、OBJECT_ID('Orders')(获取表的对象ID)、SUSER_NAME()(获取当前登录用户名)
各类函数核心差异快速总结
| 函数类型 | 返回值类型 | 核心用途 |
|---|---|---|
| 标量函数 | 单个值 | 单值计算、数据处理 |
| 表值函数 | 结果集(表) | 带参数的数据集查询 |
| 聚合函数 | 单个汇总值 | 分组统计、数据汇总 |
| 系统函数 | 单个值/特定对象 | 系统信息获取、类型转换等 |
内容的提问来源于stack exchange,提问作者Ujjwal Jha




