解决ora-01861文字与格式字符串不匹配

ぁ尐熙ぁ414

ぁ尐熙ぁ414

2016-01-29 14:46

解决ora-01861文字与格式字符串不匹配,解决ora-01861文字与格式字符串不匹配

    症状:c/s程序本来运行正常,一次重装系统,重装oracle客户端后,insert日期格式数据,出现题目中错误。

    解决办法:

    Oracle时间格式讨论

    在网上看见不少oracle新学者对oracle的时间格式很烦,经常是设计了一个带时间字段的表之后,向表插入数据失败。回想起自己刚开始学习oracle时,也对这个时间格式摸不着头脑,虽然是小小的问题,高手们不屑于讨论,但对初学者来讲,这也是一个不大不小的坎,没找到门路的话, 可能几天都过不去,其实就是一层窗户纸,没什么难的。这里做一个简单的小结,因水平有限,请高手补充指正。

    1 oracle对时间格式的数据存贮

    oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。因此在一些前台支持毫秒级的程序(如PB客户端程序)连接到oracle数据库时应注意这点。查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。

    2 oracle时间显示形式

    通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:28-Jan-2003,而使用zhs16gbk字符集(或其他中文字符集)时时间格式缺省显示为:2003-1月-28.向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。查看当前会话的时间格式,可以使用以下的SQL语句:SQL select sysdate from dual;(只能按照此语句的结果,才能插入数据)

    3 向oracle表中插入时间格式的数据

    向oracle表插入时间格式的数据是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的格式。有两个与时间相关的转换函数:to_char 和 to_date .to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值,通常在insert 语句中使用。(呵呵,程序中没这样做,所以出错)在日期格式中,各种日期格式分量这里不作详细的讨论,请查oracle帮助文档中这两个函数的用法,或者查一查PL/SQL编程的书,讲得很详细的。

    4 如何修改会话中的日期格式

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com)

    修改当前会话中的日期格式据说有三种办法,我只做过前两种办法的试验,修改glogin.sql文件的办法我没有试过,不知道是不是真的能行。下面一一解说。

    (1) 在sql*plus中修改当前会话的日期格式SQL alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';将当前会话的时间格式修改为这种格式: 2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:分钟:秒。

    这种修改方法,只对当前会话有效。注意,是对当前会话,而不是当前的sql*plus窗口。即如果你这样修改之后,又使用connect命令以其他用户连接到数据库或者是连接到其他的数据库,则这个日期格式就失效了,又恢复到缺省的日期格式。

    (2) 修改注册表(只对windows系统)

    在注册表hkey_local_machinesoftwareoraclehome0主键中增加一个字串(8i版本,9i也可以),字串名为nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus.这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。

    unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。

    (3) 修改$oracle_homesqlplusadmin目录中glogin.sql文件这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。

    5 日期格式的优先级

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com)

    如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。

    因此,如果

展开更多 50%)
分享

猜你喜欢

解决ora-01861文字与格式字符串不匹配

电脑网络
解决ora-01861文字与格式字符串不匹配

java 字符串匹配函数

Web开发
java 字符串匹配函数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

字符串格式定义

电脑入门
字符串格式定义

字符串近似匹配算法

编程语言 网络编程
字符串近似匹配算法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java字符串与格式化输出的深入分析

编程语言 网络编程
java字符串与格式化输出的深入分析

计算字符串长度(关于日文字符)

编程语言 网络编程
计算字符串长度(关于日文字符)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

让你同时上传 1000 个文件 (二)

让你同时上传 1000 个文件 (二)

以最短的宕机时间升级到Oracle10g

以最短的宕机时间升级到Oracle10g
下拉加载更多内容 ↓