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