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

MSSQL中如何将money类型时间与datetime类型日期合并

嘿,这个拆分存储日期时间的设计确实有点让人头疼,但咱们完全可以通过SQL把这两列合并成完整的datetime值。我给你两种常用的实现方法,你可以根据自己的场景选择:

方法一:字符串拼接转换(直观易懂)

这种方法先把Time列的数值拆分成时、分、秒,拼接成标准的时间字符串,再和Date列的日期部分合并:

SELECT 
    Date,
    Time,
    -- 生成完整的日期时间
    CAST(Date AS DATE) + CAST(
        -- 格式化小时为两位,不足补0
        RIGHT('0' + CAST(FLOOR(Time) AS VARCHAR(2)), 2) + ':' +
        -- 格式化分钟为两位,不足补0
        RIGHT('0' + CAST(FLOOR((Time - FLOOR(Time)) * 100) AS VARCHAR(2)), 2) + ':' +
        -- 格式化秒为两位,不足补0(处理小数部分的秒)
        RIGHT('0' + CAST(ROUND(((Time - FLOOR(Time)) * 100 - FLOOR((Time - FLOOR(Time)) * 100)) * 100, 0) AS VARCHAR(2)), 2)
    AS TIME) AS FullDatetime
FROM YourTableName;

这里用FLOOR函数提取整数部分,RIGHT('0' + ..., 2)确保时、分、秒都是两位格式,避免出现5:3:2这种不标准的时间字符串导致转换失败。

方法二:DATEADD分步累加(性能更优)

如果你的数据量比较大,字符串转换可能会影响性能,推荐用DATEADD直接把时、分、秒加到Date列上:

SELECT 
    Date,
    Time,
    DATEADD(SECOND, 
        -- 计算秒数并取整
        ROUND(((Time - FLOOR(Time)) * 100 - FLOOR((Time - FLOOR(Time)) * 100)) * 100, 0),
        DATEADD(MINUTE, 
            -- 计算分钟数
            FLOOR((Time - FLOOR(Time)) * 100),
            DATEADD(HOUR, 
                -- 计算小时数
                FLOOR(Time), 
                Date)
        )
    ) AS FullDatetime
FROM YourTableName;

这个方法完全基于数值计算,避免了字符串转换的开销,适合大数据量的场景。

额外提示

  • 如果你的Time列只存储到分钟(比如示例中的10.35对应10:35:00),那秒的部分可以直接设为0,简化计算逻辑。
  • 要确保Time列的数值在合法时间范围内(0.0000到23.5959),否则可能生成无效的datetime值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:53