Acc*_*_CO 5 sql-server type-conversion time date-math
是否有 T-SQL 编码最佳实践来获得一组时间的准确标准偏差值?STDEV
不喜欢time
数据类型。我在想,可能是将分钟转换为整数,但是从/到什么的转换?有什么建议?
您可以time
使用DATEDIFF()
和DATEDIFF_BIG()
函数将值转换为相应数量的所需时间单位:
DATEDIFF(MINUTE, CAST('00:00' AS time), YourTimeColumn) AS Minutes
DATEDIFF(SECOND, CAST('00:00' AS time), YourTimeColumn) AS Seconds
DATEDIFF(MILLISECOND, CAST('00:00' AS time), YourTimeColumn) AS Milliseconds
Run Code Online (Sandbox Code Playgroud)
基本上,您只是在给定单位中获得时间戳00:00:00.0000000
和您的时间值之间的差异。
你可以把整个表达式放在里面STDEV
:
STDEV(DATEDIFF(MINUTE, CAST('00:00' AS time), YourTimeColumn))
Run Code Online (Sandbox Code Playgroud)
当然,这会在几分钟内为您提供偏差。如果您需要将其转换回time
,您可以通过应用DATEADD()
到STDEV
结果来实现:
DATEADD(
MINUTE
, CAST('00:00' AS time)
, STDEV(
DATEDIFF(
MINUTE
, CAST('00:00' AS time)
, YourTimeColumn
)
)
)
Run Code Online (Sandbox Code Playgroud)
这样最终的表达式就变得很麻烦了。您可以尝试通过将一些中间表达式定义为列来简化它。一种方法是使用CROSS APPLY
. 例如,您可以通过以下方式为DATEDIFF
结果定义和使用临时计算列:
SELECT
...
DATEADD(MINUTE, CAST('00:00' AS time), STDEV(tmp.TimeMinutes)) AS TimeStDev,
...
FROM
dbo.YourTable AS data
CROSS APPLY
(
SELECT
DATEDIFF(MINUTE, CAST('00:00' AS time), data.YourTimeColumn)
) AS tmp (TimeMinutes)
...
WHERE
...
;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
313 次 |
最近记录: |