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

SQL Server:将TIME类型转换为数值以实现列相乘计算

解决TIME与FLOAT相乘的问题

直接把转换逻辑嵌入计算语句里就行,不需要“替换”原Cal2列——因为原列是TIME类型,没法存数值,直接在计算时用转换后的数值参与运算就好,分两种常用场景给你方案:

1. 直接查询计算结果(不修改原表)

如果只是想看计算后的结果,直接在SELECT里把转换后的Cal2和Cal1相乘,比如用你已经验证过的转换方式:

SELECT
    Cal1,
    Cal2,
    -- 直接用转换后的小时数和Cal1相乘,生成结果列
    Cal1 * (CAST(CAST(Cal2 AS datetime) AS float) * 24) AS 计算结果
FROM 你的表名;

也可以用更直观的DATEPART函数拆分时分秒计算小时数,可读性更强:

SELECT
    Cal1,
    Cal2,
    Cal1 * (DATEPART(HOUR, Cal2) + DATEPART(MINUTE, Cal2)/60.0 + DATEPART(SECOND, Cal2)/3600.0) AS 计算结果
FROM 你的表名;

2. 把计算结果存入表中(新增列)

如果需要长期保存计算结果,可以给表加一个FLOAT类型的新列,再把计算结果更新进去:
首先添加新列:

ALTER TABLE 你的表名 ADD 计算结果列 FLOAT;

然后更新数据:

UPDATE 你的表名
SET 计算结果列 = Cal1 * (CAST(CAST(Cal2 AS datetime) AS float) * 24);

注意:不要试图替换原Cal2列——原列是TIME类型,和数值类型不兼容,强行修改列类型会丢失原时间数据,完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:10