Как я могу исправить ORA-01850 час должен быть между 0 и 23 проблемы в Oracle с использованием LPAD - PullRequest
0 голосов
/ 02 марта 2020

У меня есть следующий оператор 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. Как я могу это исправить с помощью левого отступа (LPAD) в oracle?

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Ваша самая большая проблема заключается в том, что вы храните даты и время в виде строк (или чисел), а не в виде дат. Вы должны исправить это в таблице (если можете).

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_date и entry_time, и вам не нужно беспокоиться о пропущенном ведении обнуляет и может просто отформатировать дату и время так, как вам нужно. 1014 * TO_CHAR( TO_DATE( LPAD( entry_time, 6, '0' ), 'hh24miss' ), 'hh24:mi:ss' ) (Примечание: вы также хотите hh24 вместо hh, что является просто 12-часовыми часами; или, если вы действительно хотите 12-часовые часы, то вы, вероятно, также хотите индикатор меридиана 'hh12:mi:ss am')

0 голосов
/ 02 марта 2020

Вы можете просто использовать LPAD для заполнения 0, если длина entry_time не равна 6 следующим образом:

to_char(to_date (LPAD(pharmacy_employee_master.entry_time,6,0), 'hh24miss'), 'hh:mi:ss')

Cheers !!

...