我如何使用 LPAD 修复 Oracle 中的 ORA-01850 小时必须介于 0 和 23 之间的问题
How I can fix ORA-01850 hour must be between 0 and 23 problem in Oracle using LPAD
我有以下 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) 来解决这个问题?
如果 entry_time 的长度不是 6,您可以简单地使用 LPAD
填充 0,如下所示:
to_char(to_date (LPAD(pharmacy_employee_master.entry_time,6,0), 'hh24miss'), 'hh:mi:ss')
干杯!!
您最大的问题是您将日期和时间存储为字符串(或数字)而不是日期。您应该在 table 中解决此问题(如果可以的话)。
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
列,您无需担心丢失前导零,只需按照您的格式设置日期和时间要求。)
如果您不能这样做,请使用:
TO_CHAR(
TO_DATE( LPAD( entry_time, 6, '0' ), 'hh24miss' ),
'hh24:mi:ss'
)
(注意:您还需要 hh24
而不是 hh
这只是一个 12 小时制;或者,如果您确实想要 12 小时制,那么您可能还想要一个经络指示器'hh12:mi:ss am'
)
我有以下 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) 来解决这个问题?
如果 entry_time 的长度不是 6,您可以简单地使用 LPAD
填充 0,如下所示:
to_char(to_date (LPAD(pharmacy_employee_master.entry_time,6,0), 'hh24miss'), 'hh:mi:ss')
干杯!!
您最大的问题是您将日期和时间存储为字符串(或数字)而不是日期。您应该在 table 中解决此问题(如果可以的话)。
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
列,您无需担心丢失前导零,只需按照您的格式设置日期和时间要求。)
如果您不能这样做,请使用:
TO_CHAR(
TO_DATE( LPAD( entry_time, 6, '0' ), 'hh24miss' ),
'hh24:mi:ss'
)
(注意:您还需要 hh24
而不是 hh
这只是一个 12 小时制;或者,如果您确实想要 12 小时制,那么您可能还想要一个经络指示器'hh12:mi:ss am'
)