ora-01850:小时必须介于0和23之间

798qvoo8  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(733)

需要帮助把军队转换成标准时间。
我有下面的代码:但是,它给我错误ora-01850

select to_char (to_date(tst_time, 'HH24MI'), 'HH:MI AM')  integer_time  FROM STATUS_HISTORY
where tst_id = '75344'

我认为这是因为tst\u time的值只有前2个条目的3个字符。如果tst\U时间只包含3个数字,如何在开始时添加0?

Table Value   Expected Result

TST_Time  integer_time

958      09:58 AM     
541      05:41 AM
1609     04:09 PM
t30tvxxf

t30tvxxf1#

如果我理解正确,你可以用 lpad() :

select  to_char(to_date(lpad(tst_time, 4, '0'), 'HH24MI'), 'HH:MI AM') integer_time
from (select '1609' as tst_time from dual union all
      select '948' from dual
     )

必要时在前面加一个零。

rdrgkggo

rdrgkggo2#

假设 tst_time 是一个数字-这似乎是可能的;如果它是一个字符串,那么它已经有了前导零是有意义的——那么您正在用 to_date() 打电话。
如果进行显式转换,则可以在该点引入前导零:

to_char(to_date(to_char(tst_time, 'FM0000'), 'HH24MI'), 'HH:MI AM')

这个 to_char(tst_time, 'FM0000') 将958转换为0958(调频部分阻止它有一个领先的空间,以允许+/-标志;但在这里并不重要。)
db<>小提琴

相关问题