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

如何在MS SQL中将13位时间戳转换为指定日期时间格式

解决MS SQL中13位毫秒时间戳转指定日期格式的问题

我来帮你搞定这个转换需求——13位的时间戳本质是毫秒级的UNIX时间戳,MS SQL里处理它的关键是先把毫秒数转成datetime,再格式化你要的12小时制样式。

核心解决方案(SQL Server 2012及以上推荐)

直接用DATEADD转换时间戳为datetime,再用FORMAT函数生成你要的格式:

-- 测试单个时间戳
DECLARE @MsTimestamp BIGINT = 1525939481255;
SELECT 
    FORMAT(
        DATEADD(MILLISECOND, @MsTimestamp, '1970-01-01'),
        'dd-MM-yyyy hh:mm:ss tt'
    ) AS FormattedDateTime;

执行后会输出:09-05-2018 03:44:41 PM(这个是UTC时间,如果需要本地时区,比如北京时间,记得加DATEADD(HOUR, 8, ...)调整偏移)

如果是直接处理表中的列,把变量换成你的字段名即可:

SELECT 
    FORMAT(
        DATEADD(MILLISECOND, YourTimestampColumn, '1970-01-01'),
        'dd-MM-yyyy hh:mm:ss tt'
    ) AS FormattedDateTime
FROM YourTableName;

低版本SQL Server兼容方案(2012以下)

如果你的SQL Server版本不支持FORMAT函数,用CONVERT拼接的方式实现:

DECLARE @MsTimestamp BIGINT = 1525939481255;
SELECT 
    CONVERT(VARCHAR(10), dt, 105) -- 转成dd-MM-yyyy格式
    + ' '
    + SUBSTRING(CONVERT(VARCHAR(26), dt, 109), 13, 8) -- 提取hh:mm:ss部分
    + RIGHT(CONVERT(VARCHAR(26), dt, 109), 2) -- 提取AM/PM标识
FROM (
    SELECT DATEADD(MILLISECOND, @MsTimestamp, '1970-01-01') AS dt
) t;

关键细节说明

  • 13位时间戳是从1970-01-01 00:00:00 UTC开始计算的毫秒数,所以必须用DATEADD(MILLISECOND, ...)来转换,不能直接转成秒(会丢失精度)。
  • 格式字符串里的hh对应12小时制小时,tt对应AM/PM标识;如果不需要显示AM/PM,去掉tt即可。
  • 注意时区问题:如果你的时间戳是UTC时间,但业务需要本地时间,记得在转换后加上对应的时区偏移(比如北京时间加8小时)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:43