Oracle - 不是有效的月份

时间:2013-08-12 08:38:56

标签: c# asp.net oracle datetime

我在下面的代码中从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')

但我收到错误“不是有效月份”

有什么想法吗?提前谢谢。

6 个答案:

答案 0 :(得分:2)

如果这是你的约会对象:

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

它应该是这样的:

2013-08-01 02:55:31

您可以使用TO_DATE函数(具有正确的掩码格式):

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

答案 1 :(得分:1)

当您尝试映射时:

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

格式为:

mm-dd-yyyy hh24:mi:ss

它不会仅仅因为您的日期组件位于错误的位置而起作用。它预计一开始就会有两位数的月份,但你给它的是20的世纪,这绝对不是一个有效的月份。

您需要更改数据或映射,以便它们匹配。

答案 2 :(得分: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

答案 3 :(得分:0)

您想要的Oracle日期格式是mm-dd-yyyy,但facebook时间戳是yyyy-mm-dd。

答案 4 :(得分:0)

你应该做这样的事情;

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

然后为abbcusttime设置一个参数,在添加参数时也不要使用撇号('),它不喜欢:)

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

答案 5 :(得分:0)

您最好使用参数

  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();
    }