You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何将字符串转换为DATE类型?(C#读Excel场景)

解决C#读取的年月字符串转Oracle DATE类型的方法

有两种常用方案,分别在C#端转换后插入,或直接在Oracle端转换:

方案一:C#端先转换为DateTime再参数化插入

因为Oracle的DATE类型需要包含年、月、日,所以先把2015.08这类字符串解析为C#的DateTime(默认取当月第一天),再通过参数化命令插入,避免SQL注入和格式错误:

// 读取到的Excel年月字符串
string excelDateStr = "2015.08";
// 解析为DateTime,格式匹配"yyyy.MM"
DateTime manufactureDate = DateTime.ParseExact(excelDateStr, "yyyy.MM", CultureInfo.InvariantCulture);
// manufactureDate此时为2015-08-01 00:00:00

// 构建Oracle参数化插入语句
string sql = "INSERT INTO your_table (manufacturedate) VALUES (:ManuDate)";
using (OracleConnection conn = new OracleConnection("your_connection_string"))
{
    conn.Open();
    using (OracleCommand cmd = new OracleCommand(sql, conn))
    {
        // 指定参数类型为Oracle DATE
        cmd.Parameters.Add(":ManuDate", OracleDbType.Date).Value = manufactureDate;
        cmd.ExecuteNonQuery();
    }
}

方案二:Oracle端使用TO_DATE函数转换

如果直接传递字符串到Oracle,可以用Oracle内置的TO_DATE函数,指定匹配的格式模型'YYYY.MM',Oracle会自动将日部分补为当月第一天:

-- 假设参数:ManuDateStr是C#传递的"2015.08"字符串
INSERT INTO your_table (manufacturedate) VALUES (TO_DATE(:ManuDateStr, 'YYYY.MM'));

在C#中同样要使用参数化传递字符串,不要直接拼接SQL:

string excelDateStr = "2015.08";
string sql = "INSERT INTO your_table (manufacturedate) VALUES (TO_DATE(:ManuDateStr, 'YYYY.MM'))";
using (OracleConnection conn = new OracleConnection("your_connection_string"))
{
    conn.Open();
    using (OracleCommand cmd = new OracleCommand(sql, conn))
    {
        cmd.Parameters.Add(":ManuDateStr", OracleDbType.Varchar2).Value = excelDateStr;
        cmd.ExecuteNonQuery();
    }
}

注意事项

  • 无论哪种方案,必须使用参数化查询,禁止直接拼接SQL字符串,防止SQL注入,同时避免因区域设置导致的格式解析错误。
  • Oracle的DATE类型包含时间部分,如果不需要时间,两种方案生成的日期默认时间为00:00:00,符合常规需求。

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:42:42