SQL 标量函数是接受一个或多个输入值并返回单个值的操作。与聚合函数(处理多行)不同,标量函数对单个行中的单个值进行操作。这些函数通常用于直接在 SQL 查询中转换、格式化或计算数据。示例包括 UPPER()
(用于将文本转换为大写)、ROUND()
(用于舍入数字)和 DATEADD()
(用于修改日期值)。当标量函数对于相同的输入始终返回相同的结果(例如,ROUND(5.75, 0)
)时,它是确定性的;当结果发生变化时(例如,GETDATE()
获取当前时间戳),它则是不确定性的。
开发人员在 SELECT 语句、WHERE 子句甚至定义计算列时使用标量函数。例如,SELECT UPPER(first_name) FROM employees;
将姓名转换为大写,而 WHERE YEAR(order_date) = 2023
筛选特定年份的订单。标量函数还可以简化数据验证,例如使用 ISNULL()
将 NULL 值替换为默认值。但是,在 WHERE 子句中过度使用它们有时会影响性能,尤其是在它们阻止使用索引的情况下。例如,在 WHERE 子句中将 UPPER()
应用于列可能需要全表扫描,而不是利用该列上的索引。
标量函数的实际应用包括格式化报表数据、清理不一致的输入或为应用程序逻辑准备值。例如,CONCAT(first_name, ' ', last_name)
将姓名合并为全名,而 COALESCE(sales_tax, 0)
确保计算不会因 NULL 而失败。开发人员还可以为重复的逻辑创建自定义标量函数,例如根据重量和距离计算运费。但是,用户定义的标量函数应保持简单,以避免性能开销。如果使用得当,标量函数可以提高代码的可读性,并减少在应用程序代码中进行数据后处理的需要。