2016-08-15 106 views
0

在問這個問題之前已經做了很多搜索,如How to convert a string into date formatHow to convert a string into date,但還是無法弄清楚。Oracle:如何將字符串轉換爲日期格式

所以,這裏的問題,如何將這些字符串日期轉換成日期Oracle

「2016年8月15日10時45分30秒」(字符串類型) - > 20160815(日期型)

「20160815104530」(字符串類型) - > 20160815(日期型)

任何想法將不勝感激。

+0

你想保留時間部分嗎?因爲Oracle的DATE類型支持日期+時間。 – sstan

+0

我還應該提到,您鏈接的帖子不適用於Oracle。你不能指望在SQL Server或Excel的帖子中找到Oracle有用的信息。爲什麼不去源呢? [TO_DATE官方文檔](https://docs.oracle.com/database/121/SQLRF/functions219.htm#SQLRF06132) – sstan

+0

我只想得到日期,沒有時間部分需要 – triffic

回答

1

您在這裏混合了兩兩件事:

首先是一個字符串數據類型的轉換,在Oracle VARCHAR2DATE數據類型。 DATE數據類型的精度爲秒,你不能改變它。 A DATE數據類型將始終爲您提供日期和時間組件,即年,月,日,小時,分和秒:Oracle SQL Data Type Documentation

但是,您所要求的第二部分是關於如何格式化日期檢索。這在運行報表或其他類型的日期顯示時很有用。例如,在美國,您最希望您的日期列以MM/DD/YYYY的格式顯示,而世界上其他任何地方最有可能想要使用DD/MM/YYYY。 Oracle通過告訴它你想使用什麼​​來實現這一點。您可以爲每個單獨的會話以及數據庫級別設置該參數,由您(和您的DBA)決定何時何地設置該參數。在你的情況下,你可以通過ALTER SESSION命令申請:

SQL> ALTER SESSION SET nls_date_format='YYYY-MM-DD'; 

Session altered. 

SQL> SELECT TO_DATE('2016-08-15 10:45:30', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 

SQL> SELECT TO_DATE('20160815104530', 'YYYYMMDDHH24MISS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 
+0

謝謝,這對我來說很清楚。 – triffic

1

您使用to_date()

select to_date(substr(str1, 1, 10), 'YYYY-MM-DD') 
select to_date(substr(str2, 1, 8), 'YYYYMMDD') 
+0

謝謝,但是它顯示出來了:'' 2016-08-15 00:00:00'什麼時候執行'select to_date(substr(str2,1,8),'YYYYMMDD')',我怎麼才能根據'YYYYMMDD'的格式得到日期? – triffic

+0

@triffic。 。使用'to_char()'。在Oracle中,'date'類型也包含時間。 –

相關問題