Firebird - 将存储的整数转换为等效的时间

时间:2014-08-21 10:32:52

标签: sql firebird flamerobin

我目前正在开发Firebird数据库,该数据库存储一段时间的插槽(如约会)。在数据中,时隙以整数格式存储,但不是时隙时间。

实施例: 老虎机时间:上午11点 数据库价值:660

数据库值表示为自午夜起的分钟数。所以上午11点是午夜660分钟。或者12noon是720

问题在Firebird中,如何将此660转换为1100(仍为整数)或540为900(主要是上午9点)?

2 个答案:

答案 0 :(得分:2)

您存储到数据库中的内容是自当天开始以来的分钟数。所以你只需要用60分来获得时间。请记住,在SQL中,如果除法的两个参数都是整数,那么你将得到整数作为答案,而不是十进制!下面的内容应该适合您(假设分钟数存储到timeslot字段):

SELECT 
 cast(timeslot / 60 as varchar(2)) || 
   case
     when mod(timeslot, 60) < 10 then '0'|| mod(timeslot, 60)
     else mod(timeslot, 60)
   end
FROM t

这应该会在上午11:30给你1130,而不是1150(11,5小时)。

另见DATEADD功能。

答案 1 :(得分:2)

首先,我将它作为TIME列存储在数据库中,而不是几分钟。请注意,在技术层面上,Firebird将TIME存储为自午夜以来100微秒的数量。但是,如果您真的想以分钟数存储,那么您可以使用:

使用DATEADDTIME:

DATEADD(x MINUTE TO TIME'00:00')

使用DATEDIFF的时间分钟:

DATEDIFF(MINUTE FROM TIME'00:00' TO y)

所以:

SELECT 
  DATEADD(660 MINUTE TO TIME'00:00'), 
  DATEDIFF(MINUTE FROM TIME'00:00' TO TIME'11:00') 
FROM RDB$DATABASE

将返回:11:00:00.000, 660