SQL Server 常见函数详解

SQL Server 常见函数详解

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

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 函数和关键字在实际应用中非常重要,掌握它们可以提高数据库操作的效率。🚀

随便看看