You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQL Server的Log Sequence Number(LSN)十六进制值转换为十进制

SQL Server LSN十六进制格式转十进制方法

SQL Server的日志序列号(LSN)是三段由冒号分隔的十六进制字符串,结构为[VLF序列号]:[日志块偏移]:[槽号],转换可按以下步骤操作:

手动转换步骤

  • 第一步:将目标LSN按冒号:分割为三个独立的十六进制子串,示例000000dc:00003146:0002分割后得到三个子串:000000dc、00003146、0002。
  • 第二步:分别将每个十六进制子串转换为十进制数值,十六进制前缀的0不影响转换结果:
    • 第一段000000dc转十进制:十六进制dc= 13×16 + 12 = 220
    • 第二段00003146转十进制:十六进制3146= 3×16³ + 1×16² + 4×16 + 6 = 12614
    • 第三段0002转十进制:十六进制2= 2
  • 第三步:根据使用场景选择输出形式:
    • 若需要独立分段值,直接使用上述三个转换结果即可
    • 若需要拼接为完整的单值十进制LSN,需将第二段补前导0到10位、第三段补前导0到5位,再和第一段按顺序拼接,示例拼接结果为220000001261400002

SQL Server内置方法转换

直接在数据库中执行以下T-SQL代码即可完成转换,无需手动计算:

DECLARE @InputLSN VARCHAR(50) = '000000dc:00003146:0002'
-- 替换冒号为点后用PARSENAME拆分三段,转二进制再转大整数
SELECT
    CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 3), 1)) AS 第一段十进制值,
    CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 2), 1)) AS 第二段十进制值,
    CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 1), 1)) AS 第三段十进制值,
    -- 拼接为完整单值十进制LSN
    CONCAT(
        CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 3), 1)),
        RIGHT(CONCAT('0000000000', CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 2), 1))), 10),
        RIGHT(CONCAT('00000', CONVERT(BIGINT, CONVERT(VARBINARY, '0x' + PARSENAME(REPLACE(@InputLSN, ':', '.'), 1), 1))), 5)
    ) AS 完整十进制LSN

注意事项

  • 转换时需将每一段视为无符号十六进制数,避免带符号转换出现负数结果
  • 完整单值LSN的补位规则是SQL Server官方标准,可直接用于fn_dblog等系统函数的参数查询

内容的提问来源于stack exchange,提问作者luca canonico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:04