SQL Server 常见函数详解

SQL Server 常见函数详解

在 SQL Server 中,有许多常用的函数可以帮助我们进行数据处理、计算和格式化。本文整理了一些重要的 SQL Server 函数,包括 ROUNDLAGOVERMERGE 等,方便学习和参考。


1. ROUND 函数

功能

ROUND 用于对数值进行四舍五入或截断。

语法

ROUND ( 数值, 保留小数位数 [, 运算方式] )
  • 数值:要处理的数值。
  • 保留小数位数:决定保留的小数位数,正数表示保留小数,负数表示对整数部分进行四舍五入。
  • 运算方式(可选):
    • 0(默认)→ 四舍五入
    • 1直接截断(不进位)。

示例

SELECT ROUND(123.456, 2);  -- 结果:123.46
SELECT ROUND(123.456, -1); -- 结果:120
SELECT ROUND(123.789, 2, 1); -- 结果:123.78 (截断,不进位)

2. LAG 函数

功能

LAG 用于获取前 N 行的值,通常用于计算环比、时间序列分析等。

语法

LAG(列名, 偏移量, 默认值) OVER (PARTITION BY 分组列 ORDER BY 排序列)
  • 列名:要获取前一行值的列。
  • 偏移量:获取相对于当前行之前的第 N 行数据,默认为 1
  • 默认值:如果没有前 N 行数据,则返回默认值。

示例

SELECT
    report_date,
    shipment_count,
    LAG(shipment_count, 1) OVER (PARTITION BY F_CompanyId ORDER BY report_date) AS prev_shipment
FROM shipment_stats;

🔹 这个查询会返回 上一天的出货量


3. OVER 关键字

功能

OVER 关键字用于窗口函数,指定数据如何进行分组和排序。

示例

SELECT
    employee_id,
    department_id,
    salary,
    AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_per_dept
FROM employees;

🔹 这个查询计算每个部门的平均工资,而不会影响原始数据的展示。


4. MERGE 语句(UPSERT 操作)

功能

MERGE 允许你同时进行 INSERT、UPDATE 和 DELETE 操作,非常适合批量更新数据。

语法

MERGE INTO 目标表 AS target
USING 源数据 AS source
ON target.匹配列 = source.匹配列
WHEN MATCHED THEN
    UPDATE SET target.列名 = source.列名
WHEN NOT MATCHED THEN
    INSERT (列1, 列2) VALUES (source.列1, source.列2);

示例

MERGE INTO users AS target
USING users_temp AS source
ON target.id = source.id
WHEN MATCHED THEN
    UPDATE SET target.age = source.age
WHEN NOT MATCHED THEN
    INSERT (id, name, age) VALUES (source.id, source.name, source.age);

🔹 这个查询会 更新已存在的用户,插入不存在的用户


5. 如何在 SQL Server 中进行浮点数计算

在 SQL Server 中,整数除法会自动截断小数

示例

SELECT -169 / 364;  -- 结果:0(整数除法,截断小数)
SELECT -169.0 / 364; -- 结果:-0.464285714...
SELECT CAST(-169 AS DECIMAL(10,4)) / 364; -- 结果:-0.4643

如果你只想返回 -0.46,可以使用:

SELECT CAST(ROUND(-169.0 / 364, 2) AS DECIMAL(10,2));  -- 结果:-0.46

总结

函数/关键字作用
ROUND 四舍五入或截断数值
LAG 获取前 N 行数据
OVER 用于窗口函数,进行分组和排序
MERGE 实现 UPSERT(有则更新,无则插入)

这些 SQL Server 函数和关键字在实际应用中非常重要,掌握它们可以提高数据库操作的效率。🚀

posted @ 2025-02-26 11:24  曲琦  阅读(119)  评论(0)    收藏  举报