0
我運行到這個「ORA-01850」錯誤的只有我查詢的LOGIN_TIME一部分。我相信這是因爲有些人在我的球隊被遺忘在註銷他們的輪班結束,因此他們的登錄時間超過了24小時,在這些數據字段(它不應該)上的一些數據字段。ORA-01850錯誤的TO_NUM(TO_CHAR(TO_DATE功能
所以基本上我想要我的查詢做的是;讀取登錄時間,如果它超過24小時,則減少時間回落至24小時,這樣它就可以被轉換成秒。
我認爲,這將糾正這個錯誤?但是我怎麼連做呢?
SELECT
CALL_DATE as "Date"
, TO_NUMBER(TO_CHAR(TO_DATE(CALL_TIME,'hh24:mi:ss'),'sssss'))/86400 as "Time"
, AGENT_GROUP as "Agent Group"
, AGENT_NAME as "Agent Name"
, STATE as "State"
, REASON_CODE as "Reason Code"
, TO_NUMBER(TO_CHAR(TO_DATE(LOGIN_TIME,'hh24:mi:ss'),'sssss'))/86400 as "Login Time"
, TO_NUMBER(TO_CHAR(TO_DATE(READY_TIME,'hh24:mi:ss'),'sssss'))/86400 as "Ready Time"
, TO_NUMBER(TO_CHAR(TO_DATE(NOT_READY_TIME,'hh24:mi:ss'),'sssss'))/86400 as "Not Ready Time"
FROM DB.AGENT_DETAILS
WHERE
AGENT_GROUP in ('Sales')
and TRUNC(CALL_DATE) BETWEEN '01-January-2017' and TRUNC(SYSDATE)
什麼是'CALL_TIME','LOGIN_TIME','READY_TIME'和'NOT_READY_TIME'的數據類型?如果它們是VARCHAR2,'ORA-01850小時必須介於0到23之間'意味着至少有一行以24或更大的數字開始;如果它們是DATE,則意味着您會遇到隱式轉換問題(即,如果它們已經是DATE,則不應在其上調用TO_DATE)。 –
如果他們已經是DATE了,另一種獲得你所需要的方法就是'(call_time-trunc(call_time))* 86400',它不需要這麼多的數據類型轉換。 –
是的,他們是VARCHAR2。是的,這是「ORA-01850小時必須在0到23小時之間」的錯誤。那麼,如何添加一個子句來將時間更長的時間轉換回24?這就是我想要做的。 – Melanie