oracle 中的十进制转小时错误 01850 sql

decimal to hour error 01850 in oracle sql

我有一列这种格式的小时数

HOUR
0 (meaning 0:00)
0.5 (meaning 0:30)
until 
23.5 (meaning 23:30)

我想将这些小数转换为实际小时数,所以我在 pl 上写了以下代码 sql

select TO_DATE (cast(hour as integer)||':'||round((cast(hour as int)-hour)*60,2),'HH24:MI') as f_hour
from half_hour

但现在我收到 ORA 01850:小时必须介于 0 和 23 之间 有帮助吗?

你快到了。 FLOOR 将确保您在 table

中以 23.5 获得 23
select TO_DATE (cast(FLOOR(hour) as integer)||':'||round((cast(hour as int)-hour)*60,2),'HH24:MI') as f_hour
from half_hour;

CAST as INTEGER四舍五入,23.5变成24.

但是,以上假设您总是有 30 分钟的倍数的时间。

我会使用类似下面的东西,它不需要时间是 30 分钟的倍数

select TO_DATE (FLOOR(hour) || ':'|| mod(hour,  floor(hour) )*60,'HH24:MI') as f_hour
    from half_hour;

解释 -

Input - 12.6
FLOOR(INPUT) - 12
MOD(INPUT, FLOOR(INPUT)) - 0.6
MOD(INPUT, FLOOR(INPUT))*60 - 36 <-- this is your minutes.