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

Oracle SQL Loader无法加载非默认格式日期数据(ORA-01858)

解决SQL Loader加载非默认格式日期的问题

你遇到的核心问题是:SQL Loader不会解析数据文件中的SQL函数。它会把TO_DATE('1901-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')这整串内容当成普通字符串,尝试直接转换为DATE类型,自然触发ORA-01858错误——因为字符串开头的T不是日期格式预期的数字。

下面是两种可行的解决方法:

方法1:直接在控制文件中指定日期格式

这是最简洁的处理方式,不需要修改数据文件结构,仅在控制文件里给MYDATE字段指定格式掩码即可:

调整后的.dat文件内容

1901-02-01 00:00:00&,#2#@

修改后的控制文件

LOAD DATA
INFILE "mytable.dat" "str '#@\n'"
INTO TABLE mytable TRUNCATE
FIELDS TERMINATED BY '&,#' TRAILING NULLCOLS
(
  MYDATE DATE 'YYYY-MM-DD HH24:MI:SS',
  ID
)

SQL Loader会自动按照指定的YYYY-MM-DD HH24:MI:SS格式,把数据文件中的日期字符串转换为DATE类型,完全不需要依赖会话默认的dd-MON-yy格式。

方法2:用EXPRESSION子句调用SQL函数(适合复杂转换场景)

如果需要对日期做更复杂的处理(比如时区转换、字符串预处理),可以在控制文件中通过EXPRESSION子句调用TO_DATE函数,而非把函数写在数据文件里:

控制文件写法

LOAD DATA
INFILE "mytable.dat" "str '#@\n'"
INTO TABLE mytable TRUNCATE
FIELDS TERMINATED BY '&,#' TRAILING NULLCOLS
(
  -- 先读取原始日期字符串到临时字段
  RAW_DATE CHAR,
  -- 通过表达式转换为DATE类型
  MYDATE EXPRESSION "TO_DATE(:RAW_DATE, 'YYYY-MM-DD HH24:MI:SS')",
  ID
)

对应的.dat文件内容和方法1一致:

1901-02-01 00:00:00&,#2#@

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:25:38