关于 tsql-functions
面向 SQL Server 开发者的 T-SQL 函数参考,涵盖函数分类、版本可用性和常见用法,并提供字符串、日期时间、窗口及 JSON 示例。
主要功能
- 01按类别整理函数参考
- 02标注 SQL Server 版本
- 03字符串、日期和窗口示例
- 04JSON 操作示例
适用场景
- 01确认函数适用的 SQL Server 版本
- 02选择字符串和日期转换函数
- 03参考窗口函数用法
- 04查询 JSON 操作示例
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill tsql-functions安装后在 Claude Code 中输入/tsql-functions确认已加载。
附带文件references/string-functions.mdreferences/window-functions.md
详细介绍
T-SQL 函数参考
所有 T-SQL 函数类别的完整参考,包含特定版本的可用性。
快速参考
字符串函数
| 函数 | 说明 | 版本 |
|---|---|---|
CONCAT(str1, str2, ...) | NULL 安全拼接 | 2012+ |
CONCAT_WS(sep, str1, ...) | 使用分隔符拼接 | 2017+ |
STRING_AGG(expr, sep) | 聚合字符串 | 2017+ |
STRING_SPLIT(str, sep) | 拆分为多行 | 2016+ |
STRING_SPLIT(str, sep, 1) | 包含序号列 | 2022+ |
TRIM([chars FROM] str) | 移除首尾字符 | 2017+ |
TRANSLATE(str, from, to) | 替换字符 | 2017+ |
FORMAT(value, format) | .NET 格式字符串 | 2012+ |
日期/时间函数
| 函数 | 说明 | 版本 |
|---|---|---|
DATEADD(part, n, date) | 添加时间间隔 | 所有版本 |
DATEDIFF(part, start, end) | 计算差值(int) | 所有版本 |
DATEDIFF_BIG(part, s, e) | 计算差值(bigint) | 2016+ |
EOMONTH(date, [offset]) | 月末日期 | 2012+ |
DATETRUNC(part, date) | 截断到指定精度 | 2022+ |
DATE_BUCKET(part, n, date) | 分组到时间桶 | 2022+ |
AT TIME ZONE 'tz' | 时区转换 | 2016+ |
窗口函数
| 函数 | 说明 | 版本 |
|---|---|---|
ROW_NUMBER() | 连续且唯一的编号 | 2005+ |
RANK() | 排名,相同时留空位 | 2005+ |
DENSE_RANK() | 排名,相同时不留空位 | 2005+ |
NTILE(n) | 分配到 n 个组 | 2005+ |
LAG(col, n, default) | 前一行的值 | 2012+ |
LEAD(col, n, default) | 后一行的值 | 2012+ |
FIRST_VALUE(col) | 窗口中的首个值 | 2012+ |
LAST_VALUE(col) | 窗口中的末个值 | 2012+ |
IGNORE NULLS | 在偏移函数中跳过 NULL | 2022+ |
SQL Server 2022 新函数
| 函数 | 说明 |
|---|---|
GREATEST(v1, v2, ...) | 值中的最大值 |
LEAST(v1, v2, ...) | 值中的最小值 |
DATETRUNC(part, date) | 截断日期 |
GENERATE_SERIES(start, stop, [step]) | 生成数字序列 |
JSON_OBJECT('key': val) | 创建 JSON 对象 |
JSON_ARRAY(v1, v2, ...) | 创建 JSON 数组 |
JSON_PATH_EXISTS(json, path) | 检查路径是否存在 |
IS [NOT] DISTINCT FROM | NULL 安全比较 |
核心模式
字符串处理
-- Concatenate with separator (NULL-safe)
SELECT CONCAT_WS(', ', FirstName, MiddleName, LastName) AS FullName
-- Split string to rows with ordinal
SELECT value, ordinal
FROM STRING_SPLIT('apple,banana,cherry', ',', 1)
-- Aggregate strings with ordering
SELECT DeptID,
STRING_AGG(EmployeeName, ', ') WITHIN GROUP (ORDER BY HireDate)
FROM Employees
GROUP BY DeptID
日期操作
-- Truncate to first of month
SELECT DATETRUNC(month, OrderDate) AS MonthStart
-- Group by week buckets
SELECT DATE_BUCKET(week, 1, OrderDate) AS WeekBucket,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY DATE_BUCKET(week, 1, OrderDate)
-- Generate date series
SELECT CAST(value AS date) AS Date
FROM GENERATE_SERIES(
CAST('2024-01-01' AS date),
CAST('2024-12-31' AS date),
1
)
窗口函数
-- Running total with partitioning
SELECT OrderID, CustomerID, Amount,
SUM(Amount) OVER (
PARTITION BY CustomerID
ORDER BY OrderDate
ROWS UNBOUNDED PRECEDING
) AS RunningTotal
FROM Orders
-- Get previous non-NULL value (SQL 2022+)
SELECT Date, Value,
LAST_VALUE(Value) IGNORE NULLS OVER (
ORDER BY Date
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS PreviousNonNull
FROM Measurements
JSON 操作
-- Extract scalar value
SELECT JSON_VALUE(JsonColumn, '$.customer.name') AS CustomerName
-- Parse JSON array to rows
SELECT j.ProductID, j.Quantity
FROM Orders
CROSS APPLY OPENJSON(OrderDetails)
WITH (
ProductID INT '$.productId',
Quantity INT '$.qty'
) AS j
-- Build JSON object (SQL 2022+)
SELECT JSON_OBJECT('id': CustomerID, 'name': CustomerName) AS CustomerJson
FROM Customers
更多参考资料
如需深入了解特定函数类别,请参阅:
references/string-functions.md- 完整的字符串函数参考,包含示例references/window-functions.md- 窗口函数和排名函数,包含窗口帧规范
评论
支持 Markdown