我需要您幫助轉換Oracle日期。Oracle - 日期格式
我有一個專門存儲日期這樣的列20150731 00:00:34.220
。不過,我想顯示這樣的列像這樣20150731
,但是當我運行一個簡單的選擇語句來測試輸出時,我得到以下錯誤。
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
錯誤
ORA-01830:轉換整個輸入串
我需要您幫助轉換Oracle日期。Oracle - 日期格式
我有一個專門存儲日期這樣的列20150731 00:00:34.220
。不過,我想顯示這樣的列像這樣20150731
,但是當我運行一個簡單的選擇語句來測試輸出時,我得到以下錯誤。
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
錯誤
ORA-01830:轉換整個輸入串
此查詢
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
導致錯誤
ORA-01830:日期格式圖象結束轉換整個輸入串
因爲你傳遞字符串長度22個字符之前,但同時你傳遞8個字符的日期格式,這顯然不符合字符串。你應該寫查詢作爲
select to_timestamp('20150731 00:00:34.550','yyyymmdd hh24:mi:ss.ff3')
from dual
至於你的表,因爲你有varchar2
列的日期,你必須要對錶的內容服務。查詢需要執行源字符串和日期格式的匹配。
如果你想顯示不受時間只有日期,你不需要處理此字符串作爲日期,你可以只
select substr('20150731 00:00:34.550', 1, 8)
from dual
是正被存儲在Oracle日期時間列之前的日期格式圖象結束?否則,您可能需要進行一些操作才能將其變爲DD-MON-YYYY格式。如果它以文本字符串形式存儲,則可以使用SUBSTR(Date_field, Start_Position, Length)
來獲取前8個字符。看看這個鏈接SUBSTR
如果列是一個varchar,你需要的日期輸出:
select TO_DATE(substr('20150731 00:00:34.550', 1, 8),'YYYYMMDD') from dual
如果它的日期格式,你需要一個字符串輸出:
select to_char(your_column, 'YYYYMMDD') from your_table
什麼是列的數據類型?如果它是DATE
(因爲它應該是),那麼它不會以您說的格式存儲。它以一種內部二進制格式存儲。您將/應該使用to_char函數以您選擇的任何格式顯示它。如果不使用to_char函數,它將以NLS_DATE_FORMAT
指定的格式顯示,格式可以在多個位置指定。
至於你的例子,你傳遞了一個字符串格式的yyyymmd hh:mi:ss.fff',但是你提供了一個只有YYYYMMDD
的描述掩碼。它不知道如何處理時間分量。除此之外,當你使用SELECT TO_DATE
時,oracle還必須執行暗示TO_CHAR
將其轉換回字符串以進行顯示。
另外,您爲to_date提供了一個包含秒的小數部分的字符串。 A DATE
數據類型僅解析爲秒。如果您需要小數秒,則需要使用TIMESTAMP
,而不是DATE
。
上,你沒有試圖改變該列中的值,而只是試圖證明它在YYYYMMDD
格式的假設工作 -
正如a_horse_with_no_name提到的,你只需要轉換它到一個字符串。在這個例子中我用SYSTIMESTAMP作爲我的約會:
SELECT TO_CHAR(systimestamp,'YYYYMMDD') FROM DUAL
結果:
20160121
這應該給你你想要顯示的YYYYMMDD
格式。
嗨 - 列的數據類型是VARCHAR2。 – netraider
「**存儲**這樣的日期......」如果它存儲的數據不是日期列,但是您可能會混淆日期的默認顯示方式以便如何存儲它們 - 哪些不是真正。 Oracle中的實際日期存儲爲代表不同時間單位的整數集。該數值數據通過db默認值或通過to_char()的有意操作轉換爲可讀格式。如果數據存儲爲varchar,那麼請明確說明。 –
然後所有你需要的是** substr(that_column_here,1,8)**除非我錯過了什麼 –