ORA-01855 :要求AM/A.M. 或 PM/P.M.

在ORACLE执行insert语句的时候提示如题错误

是下面一条语句引起的

to_date('2011/09/13 3:23PM','yyyy/mm/dd hh:miAM')

将上面语句改为

to_date('2011/09/13 3:23下午','yyyy/mm/dd hh:miAM')

 

这个应该是和NLS_DATE_LANGUAGE的设置有关,在我设置的NLS_DATE_LANGUAGE指定的语言中并不支持“上午”这样的表示方法,也就是说不同国家地区用来表示“上午/下午”的方式并不一样。

查看当前我的NLS_DATE_LANGUAGE的设置:

SQL> select * from v$nls_parameters;

PARAMETER VALUE

---------------------------------------------------------------- -----------------------------

NLS_LANGUAGE         AMERICAN

NLS_TERRITORY        AMERICA

NLS_CURRENCY $

NLS_ISO_CURRENCY     AMERICA

NLS_NUMERIC_CHARACTERS .,

NLS_CALENDAR         GREGORIAN

NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS

NLS_DATE_LANGUAGE    AMERICAN

NLS_CHARACTERSET ZHS16GBK

NLS_SORT BINARY

NLS_TIME_FORMAT HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM

NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY $

NLS_NCHAR_CHARACTERSET UTF8

NLS_COMP BINARY

NLS_LENGTH_SEMANTICS BYTE

NLS_NCHAR_CONV_EXCP FALSE

19 rows selected.

可以看到我的设置为AMERICAN,所以应该把时间中“上午”改为“AM”,以适应其语言定义要求,如果为“SIMPLIFIED CHINESE”,就可以使用“上午”这样的表示方式了。

上面是一种解决方式,也是我采用的,不过还有另一种方法,就是在session级别修改NLS_DATE_LANGUAGE的定义:

SQL> alter session set NLS_DATE_LANGUAGE='SIMPLIFIED CHINESE';

Session altered.

SQL> insert into t(typeid,typename,uptime) values(52,'登录问题',to_date('04/22/2010 10:30:44 上午','mm/dd/yyyy hh:mi:ss am'));

1 row created.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值