将varchar2列值转换为Number时出错 我无法将varchar2值字段与另一个值进行比较 像这样' 10:54'使用' 11.00',我必须将分钟与分钟字段进行比较。 怎么可能?
查询是:
select
adm_emp_num,adm_emp_nam,adm_ace_dte,asm_sft,asm_ed_tme,asm_st_tme,adm_ace_tme from Adm,asm
where adm_ace_dte =ass_sft_dte
and to_char(adm_ace_dte,'YYYYMM')=201409
--having min(to_char(adm_ace_tme,'HH24:MI')) < asm_st_tme
having min(to_char(adm_ace_tme,'HH24:MI')) < to_char(to_number(asm_st_tme,'99999
9.99'),'999999.99')
group by adm_emp_num,adm_emp_nam,adm_ace_dte,asm_sft,asm_ed_tme,asm_
st_tme,adm_ace_tme
order by 1,2
参考链接中的表结构: https://stackoverflow.com/review/suggested-edits/5861972
任何帮助将不胜感激 感谢
答案 0 :(得分:2)
使用EXTRATC
function获取微小分数。例子:
来自TIMESTAMP
类型:
SELECT EXTRACT(MINUTE FROM SYSTIMESTAMP) FROM DUAL;
来自DATE
类型:
SELECT EXTRACT(MINUTE FROM CAST(SYSDATE AS TIMESTAMP)) FROM DUAL;
VARCHAR2
类型的(例如:11:30
):
SELECT EXTRACT(MINUTE FROM TO_TIMESTAMP('11:30', 'HH24:MI')) FROM DUAL;
答案 1 :(得分:0)
你可以这样做:
select to_number(to_char(to_date('12:56', 'hh24:mi'), 'mi')) from dual;
即。首先将您的字符串转换为有效的date
,然后提取minute
部分(通过在格式中仅指定'mi'
),然后将其转换为数字。
然后您可以进行比较:
...where to_number(to_char(to_date('12:56', 'hh24:mi'), 'mi')) = ...
你当然可以解析子字符串,但是你会容易受到无效分钟的影响,比如79.
答案 2 :(得分:0)
您可以对您的值进行子字符串并将其转换为数字,例如:
...
WHERE TO_NUMBER(SUBSTR('10:54',4,2)) >= TO_NUMBER(SUBSTR('11:00',4,2));
--for minutes
...
WHERE TO_NUMBER(SUBSTR('10:54',1,2)) >= TO_NUMBER(SUBSTR('11:00',1,2));
--for hours