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')

但我得到一个错误“不是一个有效的月份”

有任何想法吗?提前致谢。

4

6 回答 6

2

如果这是您的日期:

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

它应该如下所示:

2013-08-01 02:55:31

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

to_date('" + abccusttime + "', 'yyyy-mm-dd hh24:mi:ss')
于 2013-08-12T08:43:26.213 回答
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 日期格式参考

您还可以匹配/处理时区信息,但由于不清楚如果设置了您想要什么结果,我将其省略(TZHTZM会在那里提供帮助)

一个相当琐碎的 SQLfiddle

于 2013-08-12T08:49:14.643 回答
1

当您尝试映射时:

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

格式:

mm-dd-yyyy hh24:mi:ss

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

您需要更改数据或映射以使其匹配。

于 2013-08-12T08:42:38.570 回答
0

你应该做这样的事情;

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

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

OracleCommand.Parameters.Add(":abccusttime", OracleDbType.Varchar2).Value = abccusttime; 
于 2013-08-12T08:49:11.270 回答
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();
    }
于 2013-08-12T08:49:49.833 回答
0

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

于 2013-08-12T08:42:09.240 回答