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.
我有一列这种格式的小时数
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
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.