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

来源:互联网 发布:sql 身份证 年龄 编辑:程序博客网 时间:2024/05/17 04:10

在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;

PARAMETERVALUE

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

NLS_LANGUAGE        AMERICAN

NLS_TERRITORY       AMERICA

NLS_CURRENCY$

NLS_ISO_CURRENCY    AMERICA

NLS_NUMERIC_CHARACTERS.,

NLS_CALENDAR        GREGORIAN

NLS_DATE_FORMATYYYY-MM-DD HH24:MI:SS

NLS_DATE_LANGUAGE    AMERICAN

NLS_CHARACTERSETZHS16GBK

NLS_SORTBINARY

NLS_TIME_FORMATHH.MI.SSXFF AM

NLS_TIMESTAMP_FORMATDD-MON-RR HH.MI.SSXFF AM

NLS_TIME_TZ_FORMATHH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMATDD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY$

NLS_NCHAR_CHARACTERSETUTF8

NLS_COMPBINARY

NLS_LENGTH_SEMANTICSBYTE

NLS_NCHAR_CONV_EXCPFALSE

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.

原创粉丝点击