簡體   English   中英

PL SQL - 將時間戳轉換為日期時間/日期

[英]PL SQL - Convert timestamp to datetime/date

select 
to_timestamp(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF') as SCHEDULED_TIME,
TRUNC(to_date(to_timestamp(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS'))
from S_TIDAL_STATUS

錯誤是:ORA-01830:日期格式圖片在轉換整個輸入字符串01830之前結束.00000 - “日期格式圖片在轉換整個輸入字符串之前結束”

目標是返回類似的東西

2017-07-91 23:14:00(沒有點后的內容)。

以下是SCHEDULED_TIME(時間戳)的樣子: 在此輸入圖像描述

您嘗試的問題是應用於時間戳的函數TO_DATE()。 TO_DATE()接受VARCHAR2(字符串)輸入,而不是時間戳。 因此Oracle首先使用您的NLS_TIMESTAMP_FORMAT參數隱式地將時間戳轉換為字符串,然后嘗試將此字符串轉換為日期。 根據您的NLS_TIMESTAMP_FORMAT,您可能會遇到不同的錯誤。

將時間戳轉換為日期(日期時間)的方法 - 截斷一秒的分數 - 是使用CAST函數。 例:

select systimestamp, 
       cast (systimestamp as date) as ts_cast_to_date
from   dual
;

或者,如果所有字符串都以該格式顯示,則可以先截斷字符串並直接應用TO_DATE:

to_date(substr(scheduled_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss')

這應該做的伎倆:

select 
to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF') as time_to_csecs,
to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS') as time_to_secs,
TRUNC(to_date(to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')) as time_to_day
from S_TIDAL_STATUS

請查看文檔以查看to_timestamp和to_char之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM