Oracle SQL字符串到数字的转换

Oracle SQL字符串到数字的转换,sql,oracle,Sql,Oracle,我有一个表,其中列类型为varchar2,并保存诸如“22:00”或“13:30”之类的数据。 我试图将该数字与当前时间进行比较,如果当前时间早于该时间,请选择数据 这是我目前的代码: select DISTINCT BBT_JOURNEYSTOPS.SERVICE "Service", BBT_JOURNEYSTOPS.STOP_REFERENCE "StopNo", STOP_NAME "Near", BBT_STOPS.ROAD_NAME "On", BBT_JOURNEYSTOPS

我有一个表,其中列类型为varchar2,并保存诸如“22:00”或“13:30”之类的数据。 我试图将该数字与当前时间进行比较,如果当前时间早于该时间,请选择数据

这是我目前的代码:

select DISTINCT BBT_JOURNEYSTOPS.SERVICE "Service", BBT_JOURNEYSTOPS.STOP_REFERENCE "StopNo", 
  STOP_NAME "Near", BBT_STOPS.ROAD_NAME "On", BBT_JOURNEYSTOPS.JOURNEYTIME "Duration"

from BBT_JOURNEYSTOPS
inner join BBT_WEEKLYSCHEDULE
on BBT_WEEKLYSCHEDULE.SERVICE = BBT_JOURNEYSTOPS.SERVICE
inner join BBT_STOPS
on BBT_JOURNEYSTOPS.STOP_REFERENCE = BBT_STOPS.STOPREF
where  (UPPER(BBT_JOURNEYSTOPS.SERVICE) LIKE UPPER('%'|| :route || '%')) AND 
  (TO_NUMBER(SUBSTR(BBT_WEEKLYSCHEDULE.TIMEUNTIL, 1, 2)) > (SELECT TO_NUMBER(SYSDATE, 'HH24') "NOW" FROM DUAL));
问题出在WHERE语句上。我得到的错误代码是

ORA-01481: invalid number format model
01481. 00000 -  "invalid number format model"
*Cause:    The user is attempting to either convert a number to a string
           via TO_CHAR or a string to a number via TO_NUMBER and has
           supplied an invalid number format model parameter.
*Action:   Consult your manual.

您不能直接拨打带有日期的电话号码。您有一个隐式的
TO_CHAR
,然后您试图使用日期格式模型
HH24
将该字符串显式转换为数字,这就是导致该错误的原因。您也不需要针对DUAL的子查询

而不是:

... > (SELECT TO_NUMBER(SYSDATE, 'HH24') FROM DUAL));
您可以使用:

... > TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')));
您还可以
提取(从SYSDATE算起的小时数)
。或者,您可以使用今天的日期将时间字符串转换为日期对象,并与以下内容进行更精确的比较:

... AND TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' ' || TIMEUNTIL,
  'YYYY-MM-DD HH24:MI') > SYSDATE;

我认为条件应该是:

SUBSTR(BBT_WEEKLYSCHEDULE.TIMEUNTIL, 1, 2) > to_char(sysdate, 'HH24')
过滤器的这一部分会导致错误:

SELECT TO_NUMBER(SYSDATE, 'HH24') "NOW" FROM DUAL