我如何解决ORA-01850的小时必须在0到23之间,在使用LPAD的Oracle中出现问题

问题描述 投票:0回答:2

我有以下Select语句:

SELECT 
pharmacy_employee_details.id,
pharmacy_employee_master.employee_number,
to_char(to_date(pharmacy_employee_master.entry_date,'j'),'dd/MM/yyyy') as ENTRY_DATE,
to_char(to_date (pharmacy_employee_master.entry_time, 'hh24miss'), 'hh:mi:ss') as ENTRY_TIME,
pharmacy_employee_master.beneficiaries,
pharmacy_employee_master.note,
PHARMACY_EMPLOYEE_DETAILS.ITEM_CODE,
PHARMACY_EMPLOYEE_DETAILS.ITEM_NAME,
PHARMACY_EMPLOYEE_DETAILS.QTY,
PHARMACY_EMPLOYEE_DETAILS.PRICE 
FROM PHARMACY_EMPLOYEE_MASTER 
INNER JOIN pharmacy_employee_details ON 
pharmacy_employee_details.pid=pharmacy_employee_master.id 
where 1=1 

当输入时间少于10时出现问题。如何在oracle中使用左填充(LPAD)解决该问题?

oracle oracle11g oracle10g
2个回答
2
投票
ALTER TABLE pharmacy_employee_master ADD ( entry_datetime DATE ); UPDATE pharmacy_employee_master SET entry_datetime = TO_DATE( entry_date, 'J' ) + ( TO_DATE( LPAD( entry_time, 6, '0' ), 'hh24miss' ) - TO_DATE( '00:00:00', 'hh24:mi:ss' ) );

(然后您将entry_dateentry_time列删除,您不必担心会丢失前导零,可以只按需要设置日期和时间的格式。)]] >>

db<>fiddle如果无法这样做,请使用:

TO_CHAR( TO_DATE( LPAD( entry_time, 6, '0' ), 'hh24miss' ), 'hh24:mi:ss' )

(注意:您还想要hh24而不是只需要12小时制的hh;或者,如果您确实想要12小时制,那么您可能还需要子午线指示器'hh12:mi:ss am'

如果entry_time的长度不是6,您可以简单地使用LPAD填充0:
to_char(to_date (LPAD(pharmacy_employee_master.entry_time,6,0), 'hh24miss'), 'hh:mi:ss')

干杯!


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.