【发布时间】:2014-08-18 14:54:30
【问题描述】:
我的 SQL Server 表的其中一列是 mm:ss 的 varchar 类型,其中 mm = 分钟,ss = 秒。
我需要获得该列的平均值。
我应该先将该列转换为datetime 格式吗?如果是这样,你能告诉我怎么做吗?如果没有,你能告诉我我应该怎么做吗?
这是我将其转换为日期时间的失败尝试:
SELECT CONVERT(DATETIME, '2014-01-01 '+Pace+':00', 108)
其中的速度是varchar,例如23:05
【问题讨论】:
-
最好的办法是将其转换为
int [seconds]列。 mm > 59 可以吗?如果它的 0 填充在cast(left(fld,2) * 60 + right(fld,2) as int)上进行数学运算 -
请停止使用 VARCHAR 作为TIMEs。如果您想以另一种格式存储来自 DATETIME 的数据,请考虑使用浮点数 - 它可以直接转换为 DATETIME。存储为 VARCHAR 的 DATETIME 通常是由于糟糕的编程实践,其中有人希望将 UI 数据存储在数据库中,并且懒得以本机形式处理数据。如果您不拥有代码(供应商代码),请为他们感到羞耻!
-
此外,SQL server 是为基于集合的操作而设计的,RBAR 字符串函数又慢又痛苦!您还必须验证您的数据作为您的演员表以删除尾随空格或无效条目 (99:13)。省去很多麻烦,将列更改为 TIME 并在填写时验证数据。请相信我,从长远来看,您会欣赏这一点的。
-
您没有提及您正在使用的 SQL Server version - 如果您使用的是当前支持的版本(即 2008或更新),您应该使用
TIME(n)数据类型(因为这确实是仅时间 - 不涉及日期)
标签: sql sql-server