如何通过sqlldr将平面文件中的BC年份导入Oracle数据库
如何用SQL*Loader导入带BC年份的日期到Oracle
嘿,这个需求我之前刚好处理过,其实只要调整平面文件的日期格式和SQL*Loader控制文件里的转换逻辑就能搞定,具体步骤如下:
1. 统一平面文件的日期格式
首先得让你的.txt文件里的BC日期格式保持一致,比如你举的01-01-1000BC就很清晰——核心是要把BC(或B.C.)放在年份后面,和日期部分明确区分开。如果不想用分隔符,也可以写成01011000BC,只要后续控制文件里的格式模型对应上就行。
2. 修改控制文件里的日期转换规则
你原来用的to_date(:born, 'DDMMYY')只适用于两位年份的AD日期,现在要支持BC的四位年份,得把格式模型改成对应的结构:
- 如果平面文件是
01-01-1000BC这种带分隔符的,转换语句要写成:"to_date(:born, 'DD-MM-YYYYBC')" - 如果是无分隔符的
01011000BC,就写成:"to_date(:born, 'DDMMYYYYBC')"
举个完整的控制文件例子:
LOAD DATA INFILE 'your_data.txt' INTO TABLE your_target_table FIELDS TERMINATED BY ',' -- 根据你的实际文件分隔符调整 ( -- 其他字段定义... born "to_date(:born, 'DD-MM-YYYYBC')" )
3. 验证和注意事项
- Oracle的日期格式对
BC不区分大小写,但建议平面文件里统一用大写BC,避免解析异常;如果用B.C.,格式模型要改成'DD-MM-YYYYB.C.' - 导入后可以用这条查询验证:
SELECT TO_CHAR(born, 'DD-MM-YYYY BC') FROM your_target_table;,确认BC标记正确存储 - 一定要用
YYYY作为年份格式模型,不能再用YY,否则四位的公元前年份会被错误解析
内容的提问来源于stack exchange,提问作者Bendemann
相关产品推荐
相关产品推荐

