sql-server 如何将整数转换为时间?

1aaf6o9v  于 2022-10-31  发布在  其他
关注(0)|答案(3)|浏览(249)

我想知道员工第一次打电话的平均时间。

Select EmployeeName,Length
From Callers

结果:

John Doe  94559
John Doe  100720

这基本上是军用时间,所以我相信这个数据可以转换为9:45 AM EST和10:07 AM EST。当我加上(Select dbo.convertIntToTime(FirstCall)*100)时,我可以将它转换为常规时间格式。当我尝试(Select EmployeeName,AVG(FirstCall)时,我得到的是平均值,但是是整数,我不知道如何将它转换为时间格式。
我认为问题的部分原因是数据返回的分钟值超过了60。

Select EmployeeName,AVG(Length)
From Callers
Group By EmployeeName

结果:

John Doe 106546
Tom Cruise 116275
Lebron James 156971

任何帮助都将不胜感激!

sdnqo3pr

sdnqo3pr1#

这些不是军事时间数字。没有1569在军事或任何时候为此事。军事是0000-2300,其中0000将是12:00上午和2300将是11:00下午。
所以156971,如果是军用时间,应该是下午3点69分71秒。不可能。
你确定时间是按你想的方式储存的吗?
我建议把它的存储方式改为时间戳,这样会更容易使用。

yrdbyhpb

yrdbyhpb2#

将整数转换为时间SQL Server
在SQL Server中创建Below函数-

create function change_int_to_time
(
    @input int
)
returns time(2)
as
begin
       return dateadd(hour, (@input / 1000000) % 100,
              dateadd(minute, (@input / 10000) % 100,
              dateadd(second, (@input / 100) % 100, cast('00:00:00' as time(2)))))
end

现在使用这个功能,无论你想在你的情况下,你可以使用它像下面-
例一:

Select EmployeeName,dbo.change_int_to_time(AVG(FirstCall))
From Calls
Group By EmployeeName

例二:

Select EmployeeName,dbo.change_int_to_time(FirstCall)
From Calls
Group By EmployeeName
soat7uwm

soat7uwm3#

您可以使用 TimeFromParts

Select 
    EmployeeName, 
    Length,
    TimeFromParts(Length/ 10000, Length / 100 % 100, Length % 100, 0, 0) As TrueTime
From 
    Callers

若要求平均值,请先转换为DateTime,然后转换为 Float,求平均值,再转换回 time

Select 
    EmployeeName, 
    Convert(Time(0), Convert(DateTime, Avg(Convert(Float, Convert(DateTime, TimeFromParts(Length / 10000, Length / 100 % 100, Length % 100, 0, 0)))))) As AverageLength
From 
    Callers
Group By
    EmployeeName

相关问题