You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动