SQL Server 函数的详细分类说明及用法示例

套图传送门

以下是 SQL Server 函数的详细分类说明及用法示例,涵盖常用函数及核心场景。内容基于 SQL Server 2019+ 版本,部分函数在旧版本中可能不可用。


一、字符串函数

1. CONCAT(str1, str2, ...)

  • 功能: 拼接多个字符串(自动处理 NULL 值)。
  • 示例:sql复制SELECT CONCAT(‘Hello’, ‘ ‘, ‘World’); — 输出 ‘Hello World’ SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name FROM employees;
  • 注意: 若使用 + 拼接,遇到 NULL 会返回 NULLCONCAT 将 NULL 视为空字符串。

2. SUBSTRING(str, start, length)

  • 功能: 截取子字符串。
  • 示例:sql复制SELECT SUBSTRING(‘SQL Server’, 5, 6); — 输出 ‘Server’

3. REPLACE(str, old_str, new_str)

  • 功能: 替换字符串内容。
  • 示例:sql复制SELECT REPLACE(‘I love apples’, ‘apples’, ‘oranges’); — 输出 ‘I love oranges’

4. LEN(str)

  • 功能: 返回字符串字符数(不包含末尾空格)。
  • 示例:sql复制SELECT LEN(‘SQL Server’); — 输出 10

5. CHARINDEX(substr, str, start)

  • 功能: 查找子字符串位置。
  • 示例:sql复制SELECT CHARINDEX(‘Server’, ‘SQL Server’); — 输出 5

二、数值函数

1. ROUND(number, decimals)

  • 功能: 四舍五入到指定小数位。
  • 示例:sql复制SELECT ROUND(3.1415, 2); — 输出 3.1400

2. CEILING(number) 与 FLOOR(number)

  • 功能:
    • CEILING(): 向上取整。
    • FLOOR(): 向下取整。
  • 示例:sql复制SELECT CEILING(2.3); — 输出 3 SELECT FLOOR(2.7); — 输出 2

3. RAND([seed])

  • 功能: 生成 0~1 之间的随机数。
  • 示例:sql复制SELECT RAND(); — 输出类似 0.654321 SELECT FLOOR(RAND() * 100); — 生成 0~99 的整数

三、日期时间函数

1. GETDATE()

  • 功能: 返回当前日期和时间。
  • 示例:sql复制SELECT GETDATE(); — 输出 ‘2023-10-25 14:30:00.000’

2. DATEADD(unit, number, date)

  • 功能: 日期加减。
  • 示例:sql复制SELECT DATEADD(DAY, 7, GETDATE()); — 7天后 SELECT DATEADD(MONTH, 1, ‘2023-12-31’); — 输出 ‘2024-01-31’

3. DATEDIFF(unit, start_date, end_date)

  • 功能: 计算两个日期的差值。
  • 示例:sql复制SELECT DATEDIFF(DAY, ‘2023-10-25’, ‘2023-10-31’); — 输出 6

4. FORMAT(date, format)

  • 功能: 格式化日期(类似 C# 语法)。
  • 示例:sql复制SELECT FORMAT(GETDATE(), ‘yyyy-MM-dd HH:mm:ss’); — 输出 ‘2023-10-25 14:30:00’ SELECT FORMAT(GETDATE(), ‘MMMM dd, yyyy’); — 输出 ‘October 25, 2023’

四、聚合函数

1. SUM(column)

  • 功能: 计算数值列总和。
  • 示例:sql复制SELECT SUM(sales) FROM orders WHERE year = 2023;

2. COUNT(expression)

  • 区别:
    • COUNT(*): 统计所有行。
    • COUNT(column): 忽略 NULL 值。
  • 示例:sql复制SELECT COUNT(*) FROM customers; — 总客户数

3. STRING_AGG(expression, separator)

  • 功能: 合并分组中的字符串。
  • 示例:sql复制SELECT department_id, STRING_AGG(name, ‘, ‘) FROM employees GROUP BY department_id; — 输出每个部门员工姓名列表,逗号分隔

五、条件函数

1. IIF(condition, true_value, false_value)

  • 功能: 简化版 CASE WHEN
  • 示例:sql复制SELECT IIF(score >= 60, ‘Pass’, ‘Fail’) AS result FROM exams;

2. CASE WHEN

  • 功能: 多条件分支。
  • 示例:sql复制SELECT CASE WHEN age < 18 THEN ‘Minor’ WHEN age BETWEEN 18 AND 65 THEN ‘Adult’ ELSE ‘Senior’ END AS age_group FROM users;

3. COALESCE(value1, value2, ...)

  • 功能: 返回第一个非 NULL 值。
  • 示例:sql复制SELECT COALESCE(middle_name, ‘N/A’) FROM users;

六、窗口函数

1. ROW_NUMBER()

  • 功能: 为分组内的行生成唯一序号。
  • 示例:sql复制SELECT name, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees;

2. RANK() 与 DENSE_RANK()

  • 区别:
    • RANK(): 允许并列排名(如 1,1,3)。
    • DENSE_RANK(): 允许并列排名(如 1,1,2)。

七、转换函数

1. CAST(expression AS data_type)

  • 功能: 类型转换。
  • 示例:sql复制SELECT CAST(‘123’ AS INT); — 输出 123

2. CONVERT(data_type, expression, style)

  • 功能: 类型转换(支持日期格式化)。
  • 示例:sql复制SELECT CONVERT(VARCHAR, GETDATE(), 112); — 输出 ‘20231025’(格式代码 112)

3. TRY_CONVERT(data_type, expression)

  • 功能: 安全转换(失败返回 NULL)。
  • 示例:sql复制SELECT TRY_CONVERT(INT, ‘abc’); — 输出 NULL

八、系统函数

1. ISNULL(check_expression, replacement_value)

  • 功能: 替换 NULL 值。
  • 示例:sql复制SELECT ISNULL(middle_name, ‘N/A’) FROM users;

2. NEWID()

  • 功能: 生成唯一 GUID。
  • 示例:sql复制SELECT NEWID(); — 输出类似 ‘6F9619FF-8B86-D011-B42D-00C04FC964FF’

注意事项

  1. 性能优化:
    • 避免在 WHERE 或 JOIN 条件中对字段使用函数(可能破坏索引)。
    • 示例错误写法:sql复制SELECT * FROM logs WHERE FORMAT(create_time, ‘yyyyMM’) = ‘202310’;
    • 正确优化:sql复制SELECT * FROM logs WHERE create_time >= ‘2023-10-01’ AND create_time < ‘2023-11-01’;
  2. 版本兼容性:
    • STRING_AGG 需 SQL Server 2017+。
    • FORMAT 函数需 SQL Server 2012+。
  3. NULL 处理:
    • 使用 ISNULL() 或 COALESCE() 处理默认值。
套图传送门
THE END
喜欢就支持一下吧
点赞22 分享