2013-08-12 71 views
0

我從Facebook的時間戳在下面的代碼甲骨文 - 不是有效的月份

cust_updated_time = obj["updated_time"].ToString();//2013-08-01T02:55:31+0000 
abccusttime = cust_updated_time.Substring(0, cust_updated_time.ToString().Length - 3);//2013-08-01T02:55:31+0 

在這裏,我試圖插入到Oracle表

to_date('" + abccusttime + "', 'mm-dd-yyyy hh24:mi:ss') 

,但我得到一個錯誤「不一個有效的月份「

任何想法?提前致謝。

+0

呃...您的字符串比你指定爲to_date'的'第二個參數的一個完全不同的格式。將指定的格式調整爲字符串的實際格式。 –

+0

您會收到'yyyy-MM-dd',但正在閱讀'MM-dd-yyyy'。顯然,'to_date'會告訴你'13'不是一個有效的月份。 – Nolonar

+0

@Nolonar - 或'20',視情況而定...... :) –

回答

2

,如果這是你的約會:

2013-08-01T02:55:31+0 

它應該是這樣的:

2013-08-01 02:55:31 

比你可以使用TO_DATE函數(使用正確的屏蔽格式):

to_date('" + abccusttime + "', 'yyyy-mm-dd hh24:mi:ss') 
0

所需的Oracle日期格式是mm-dd-yyyy,但facebook時間戳是yyyy-mm-dd。

1

當你試圖映射:

2013-08-01T02:55:31+0 

與格式:

mm-dd-yyyy hh24:mi:ss 

它不會因爲你的日期組件在錯誤的地方簡單地工作。它預計在開始時會有兩位數的月份,但是您要給它一個20的世紀,這絕對不是一個有效的月份。

您需要更改數據或映射以使它們匹配。

-1

我對Oracle不太瞭解,但請檢查cust_updated_time的格式:在USA和Europe之間切換的月和日格式。

0

你應該做這樣的事情,而不是;

to_date(:abccusttime, 'mm-dd-yyyy hh24:mi:ss') 

然後設置一個參數abbcusttime,也不要用引號(')添加參數時,它並不像:)

OracleCommand.Parameters.Add(":abccusttime", OracleDbType.Varchar2).Value = abccusttime; 
1

它可能更容易參數化查詢,但在這種情況下,你的時間格式錯了。匹配;

2013-08-01T02:55:31+0000 

你需要一個像這樣的格式;

yyyy-MM-dd"T"hh24:mi:ss"+0000" 

或者,如果您想要使用單個零的預處理格式;

yyyy-MM-dd"T"hh24:mi:ss"+0" 

樣品;

SELECT TO_DATE('2013-08-01T02:55:31+0000', 'yyyy-MM-dd"T"hh24:mi:ss"+0000"') FROM DUAL; 

> August, 01 2013 02:55:31+0000 

Oracle date format reference

您也可以匹配/過程中的時區信息,但因爲它是不明確的結果,你想什麼,如果它被設定,我離開了出來(TZHTZM將幫助那裏)

A rather trivial SQLfiddle

1

您更好地使用參數

DateTime updatedtime = obj["updated_time"] as DateTime; 

    var statement = "..... where Updated_time > :updatedtime"; 

    using (OracleConnection connection = new OracleConnection(connectionString)) 
    using (OracleCommand command = new OracleCommand(statement, connection)) 
    { 
     command.Parameters.AddWithValue(":updatedtime", updatedtime); 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    }