首页 » 编程开发 » ORACLE » 正文

ORACLE中MON类型时间格式转换及无效年月错误解决

问题描述:在用informatica抽取ORACLE数据库表字符串类型“23-JUN-99”格式时间时,对字符串进行日期类型转换时,格式化字符串用TO_CHAR(to_date(’23-JUN-99′,’dd-MON-YY’,),’YYYYMMDD’),提示“无效的月份”。

对于字符串类型“23-JUN-99”格式时间转换成“YYYYMMDD”格式,我们首先要了解一下日期格式字符的具体含义,请看下表:

代码 代表的格式 例子
AM、PM 上午、下午 08 AM
D 数字表示的星期(1~7) 1, 2, 3, …, 7
DD 数字表示月中的日期(1~31) 1, 2, 3, …, 31
MM 两位数的月份 01, 02, …, 12
Y、YY、YYY、YYYY 年份的后几位 8, 08, 008, 2008
RR 解决Y2K问题的年度转换  
DY 简写的星期名 MON, TUE, FRI, …
DAY 全拼的星期名 MONDAY, TUESDAY, …
MON 简写的月份名 JAN, FEB, MAR, …
MONTH 全拼的月份名 JANUARY, FEBRUARY, …
HH、HH12 12小时制的小时(1~12) 1, 2, 3, …, 12
HH24 24小时制的小时(0~23) 0, 1, 2, …, 23
MI 分(0~59) 0, 1, 2, …, 59
SS 秒(0~59) 0, 1, 2, …, 59
, . / – ; : 原样显示的标点符号  
‘TEXT’ 引号中的文本原样显示 TEXT

通过上表,那么我们本例中的字符串时间格式就是“DD-MON-YY”,我们只需要通过to_date函数就能轻松得出转换函数应该这样写:TO_CHAR(to_date(’23-JUN-99′,’dd-MON-YY’,),’YYYYMMDD’),至于为何出现提示“无效年月”的错误,主要还是因为NLS_DATE_LANGUAGE值的问题,这是由于不同系统时间格式不同导致的,现在的客户端大部分都是使用的中文环境,“JUN”的格式是无法识别的,所以需要在后面添加NLS_DATE_LANGUAGE参数强制规定语言类型,在这个例子里面我们加上“NLS_DATE_LANGUAGE=AMERICAN”进行时间格式转换就可以了。

下面介绍一下不同系统中时间转换NLS_DATE_LANGUAGE的用法:

英文:NLS_DATE_LANGUAGE=AMERICAN

日文:NLS_DATE_LANGUAGE = Japanese

中文:NLS_DATE_LANGUAGE = SIMPLIFIED CHINESE

 

总结解决方法:使用select TO_CHAR(to_date(’23-JUN-99′,’dd-MON-YY’,’NLS_DATE_LANGUAGE=AMERICAN’),’YYYY-MM-DD’) from dual;搞定。

 

本文共 1 个回复

  • silenkee 2015/11/25 10:14

    评论写得diao的孩纸,人生更diao 😎

发表评论