我目前正在开发Firebird数据库,该数据库存储一段时间的插槽(如约会)。在数据中,时隙以整数格式存储,但不是时隙时间。
实施例: 老虎机时间:上午11点 数据库价值:660
数据库值表示为自午夜起的分钟数。所以上午11点是午夜660分钟。或者12noon是720
问题在Firebird中,如何将此660转换为1100(仍为整数)或540为900(主要是上午9点)?
答案 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微秒的数量。但是,如果您真的想以分钟数存储,那么您可以使用:
使用DATEADD
从1}}到TIME
:
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