在表格中,我有一个列(AvgWaitTime),以秒为单位存储数据值(数据类型:浮点数),日期。我有一个函数,它使用AvgWaitTime列和其他几列执行一些计算,并以时间格式返回一个值。我想将函数返回的值(时间格式)转换为秒(最好是十进制,如果不是则为int)。
select
(datepart(HH, dbo.fnGetMonthlyAverageWaitTime(m.RDate) * 60 * 60) +
datepart(mi, dbo.fnGetMonthlyAverageWaitTime(m.RDate) * 60) +
datepart(s, dbo.fnGetMonthlyAverageWaitTime(m.RDate)))[MonthlyAverageWaitTime]
from TelephonyMTD m
Error: Operand type clash: time is incompatible with int
所以,我试图运行这个:
select
(datepart(HH, GetDate() * 60 * 60) +
datepart(mi, GetDate() * 60) +
datepart(s, GetDate()))
现在它说,不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询。当我查看数据类型转换图表时,我知道现在允许转换为int和float。
请建议。
答案 0 :(得分:1)
问题是你试图将日期/日期时间乘以一个没有意义的整数:
GetDate() * 60 * 60
您只需使用DATEDIFF
秒,即可获得以秒为单位的值:
SELECT DATEDIFF(SECOND, '00:00:00', dbo.fnGetMonthlyAverageWaitTime(m.RDate)) AS MonthlyAverageWaitTime
FROM TelephonyMTD AS m
快速示例
SELECT t.AvgTime,
AvgTimeInSeconds = DATEDIFF(SECOND, '00:00:00', t.AvgTime)
FROM (VALUES
(CAST('00:01:15' AS TIME)),
(CAST('05:36:47' AS TIME))
) AS t (AvgTime);
给出了:
+----------+------------------+
| AvgTime | AvgTimeInSeconds |
+----------+------------------+
| 00:01:15 | 75 |
| 05:36:47 | 20207 |
+----------+------------------+
答案 1 :(得分:0)
打开和关闭括号是导致上述错误的问题:请尝试如下
SELECT (
( Datepart(HH, Getdate()) * 60 * 60 ) +
( Datepart(mi, Getdate()) * 60 ) +
Datepart(s, Getdate())
)
答案 2 :(得分:0)
尝试使用以下语法将seconds
转换为day, hour, minute, seconds
DECLARE @sec INT = 86400;
SELECT
CAST(@sec /60/60/24 AS VARCHAR(12)) + ' Days,'
+ CAST(@sec /60/60 % 24 AS VARCHAR(12))+ ' Hours,'
+ CAST(@sec /60 % 60 AS VARCHAR(2)) + ' Minutes, '
+ CAST(@sec % 60 AS VARCHAR(2)) + ' Seconds.';