2012-11-08 65 views
2

位卡在這裏。說我運行下面的SQL查詢:如何使用to_date函數轉換複雜的sysdate +其他內容?

select to_char(sysdate, 'DD/MON/YY') || ' 15:32:00' from dual; 

結果給了我這樣的:

08/NOV/12 15:32:00 

現在我想利用這個結果,並在to_date函數使用它(長的故事,爲什麼,但我會在一秒內詳細說明):

select to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS') from dual; 

我期待的結果與上一個相同,除非不是。相反,它給了我這樣的:

08/NOV/12 

的問題是:有沒有一種方法,我可以使用TO_CHAR的連接(SYSDATE,「DD/MON/YY」)和HH24的任何組合:MI:SS在一個to_date?

可能有也可能沒有任何額外用途的其他詳細信息: 我需要這樣做的原因是因爲我提供了一個包含SLA時間表的查詢。格式只是HH24:MI中的一個時間,但它不是DATETIME類型(我懷疑它是VARCHAR,但無法確定,因爲它可能是某種我無法剖析的視圖或函數。部分原因是由於我不知道如何和部分對我沒有必要的訪問,由於我的數據庫用戶。

編輯:在再次閱讀上述我意識到我遺漏了一些額外的細節(雖然這並不涉及我的問題在所有我想想): 我想取今天的日期(DD/MON/YY),把它和HH:MI的SLA時間結合起來,把它和':00'結合起來:SS,把整個事情轉換成日期,然後做如果結束時間比我的combination-and-conversion-deluxe更大/更新/更晚,那麼返回一些具體的東西,而不是返回類似「All OK」的東西, 。不知道這是否有意義,但總而言之,我想獲得一些可用於與另一種DATETIME類型比較的內容,所以我認爲我需要以某種方式將SLA時間轉換爲DATETIME類型。

任何幫助在此將不勝感激。

+1

你用什麼客戶端來運行它?它應該工作,[演示](http://www.sqlfiddle.com/#!4/5a096/1), – Ben

+0

嗨本,使用Oracle SQL Developer來測試它。我非常肯定它應該可以正常工作,但是由於一些奇怪的原因,它似乎只是把to_char(sysdate,'DD/MON/YY')扔掉了。編輯:SQL Developer v。2.1 – kooper

+0

sql開發人員NLS設置位於工具>首選項>數據庫> NLS參數下。看到下面的答案 – DazzaL

回答

2

您看到的輸出轉換爲字符格式。這是由NLS_DATE_FORMAT設置決定的。在內部,日期仍將具有關聯的時間格式。所以這樣做是爲了看看吧:

SQL> select sysdate from dual; 

SYSDATE 
--------- 
08-NOV-12 

SQL> alter session set nls_date_format='dd/MON/yy hh24:mi:ss'; 

Session altered. 

SQL> select sysdate from dual; 

SYSDATE 
------------------ 
08/NOV/12 11:41:46 
+0

DazzaL,你太棒了! :)我沒有運行alter session,但基於此我深入瞭解SQL Developer的設置,並以Tools> Preferences> Database> NLS> Date格式結束,並將其從DD/MON/RR更改爲DD/MON/RR HH24:MI:SS。在這之後重新查詢我的查詢,並且看,現在它像一個魅力一樣工作。感謝您的快速幫助,非常感謝。 – kooper

2

你是默認的日期格式是「DD/MM/YY」如果你想顯示的時間組件,你必須使用正確的日期格式:

select to_char(to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS'),'DD/MM/YY HH24:MI:SS') from dual 
+0

謝謝你,沒有發生在我身上的另一個to_char函數。現在,在你和DazzaL的答案之後,對我來說這更加合理,似乎我設法將它轉換爲DATETIME類型,但它並沒有顯示我想要的內容,即使它在那裏。 – kooper