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

SQL Server中如何计算VARCHAR类型时间列的开放时长差?

表:Museum_hours

Museum_iddayopenclose
30sunday10:30AM05:30PM
30Monday12:30PM07:10PM

字段说明:open和close的类型均为VARCHAR。

问题

如何在SQL Server中通过这两个字段的差值得到open_hours(开放时长)?


解决方案

由于open和close是字符串类型,需先转换为TIME类型再计算时间差,以下是几种实用实现方式:

1. 输出「X小时Y分钟」格式的时长

SELECT 
    Museum_id,
    day,
    open,
    close,
    CONCAT(
        DATEDIFF(MINUTE, CAST(open AS TIME), CAST(close AS TIME)) / 60,
        '小时',
        DATEDIFF(MINUTE, CAST(open AS TIME), CAST(close AS TIME)) % 60,
        '分钟'
    ) AS open_hours
FROM Museum_hours;

2. 输出以小时为单位的小数结果

SELECT 
    Museum_id,
    day,
    open,
    close,
    DATEDIFF(MINUTE, CAST(open AS TIME), CAST(close AS TIME)) / 60.0 AS open_hours
FROM Museum_hours;

3. 兼容无效时间格式的容错写法

如果存在格式不规范的时间字符串,可使用TRY_CAST避免查询报错:

SELECT 
    Museum_id,
    day,
    open,
    close,
    CASE 
        WHEN TRY_CAST(open AS TIME) IS NOT NULL AND TRY_CAST(close AS TIME) IS NOT NULL
        THEN CONCAT(
            DATEDIFF(MINUTE, TRY_CAST(open AS TIME), TRY_CAST(close AS TIME)) / 60,
            '小时',
            DATEDIFF(MINUTE, TRY_CAST(open AS TIME), TRY_CAST(close AS TIME)) % 60,
            '分钟'
        )
        ELSE '无效时间格式'
    END AS open_hours
FROM Museum_hours;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:14