今天做oracle数据库更新的时候,Last_date 数据库定义类型为Date.如果传入的日期参数为null,则Last_date = oracle系统时间。格式要求 年/月/日 时:分:秒.实现过程中出现问题了。尝试1: to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') -- 值为 2012/4/23 19:20:34to_date(to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss') --输出值为 2012-4-23 问题1: to_date之后日期格式为何不是'yyyy/mm/dd hh24:mi:ss',时分秒去哪儿了?
问题2: 输出的2012-4-23?为何不是我指定是 'yyyy/mm/dd' 格式
尝试2:完整的sql是这样的
insert into
table(
a,
b,
c
)values (
&a,
&b,
nvl(&c,sysdate) -- 此处nvl会截掉时分秒。在pl/sql中运行通过有时分秒,但在程序中和框架搭配一起用,时分秒被 截掉了,为什么。
)
尝试3:decode(&c,null,sysdate,&c)
经测试,通过。
在此请教给位前辈了
问题2: 输出的2012-4-23?为何不是我指定是 'yyyy/mm/dd' 格式
尝试2:完整的sql是这样的
insert into
table(
a,
b,
c
)values (
&a,
&b,
nvl(&c,sysdate) -- 此处nvl会截掉时分秒。在pl/sql中运行通过有时分秒,但在程序中和框架搭配一起用,时分秒被 截掉了,为什么。
)
尝试3:decode(&c,null,sysdate,&c)
经测试,通过。
在此请教给位前辈了
再有就是,直接查询出带时分秒的字符串,然后在程序中用String保存,再进行自己的处理。
楼主所看到的丢是怎么看到的?
是通过程序debug看到的?还是通过oracle工具看到的?
这个其实是你debug时的表示问题,时分秒肯定还在,不会丢的!
不信的话,楼主可以用select to_char(date,'yyyy/mm/dd hh24:mi:ss') 的形式查询下你更新的字段,看下有没有时分秒!如果楼主非要看到时分秒,建议楼主可以把类型改成timestamp类型,这样你在debug的时候就可以看到时分秒了!
开发语言java。java.util.Date date = null; 传入日期date。查询出带时分秒的字符串之后,在更新数据库时,时间就跟当前oracle时间对不上,有时差了。
所以,必须在sql语句中做日期为空的判断,并且将带时分秒的日期插入进去。
在Pl/sql中,进行尝试1,插入数据时。时分秒看不到。去试试您说的 select to_char(date,'yyyy/mm/dd hh24:mi:ss')不过就算这样时分秒可以看到,但我想让时分秒显示的表示啊,而不是2012/4/23。做开发的。数据库定义不能改,你懂的。
尝试过timestamp。这个会带有时间戳。采用substr也截取过字符串,然后在将其to_date.昨天试过了的,好像不行,今天在去试试看
(1) 在sql*plus中修改当前会话的日期格式
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
将当前会话的时间格式修改为这种格式: 2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:分钟:秒。
(2) 修改注册表(只对windows系统)
在注册表/hkey_local_machine/software/oracle/home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus。
这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。
unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。
谢谢您的经验之谈.不过
我用的是windows 系统。不过开发工具用的是PL/SQL . 和Sql*plus 有点不一样呢
SQL> select sysdate from dual;SYSDATE
--------------
25-4月 -12SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY
-------------------
2012-04-25 22:30:22SQL> select to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:m
i:ss') from dual;TO_DATE(TO_CHA
--------------
25-4月 -12SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';会话已更改。SQL> select to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:m
i:ss') from dual;TO_DATE(TO_CHAR(SYS
-------------------
2012-04-25 22:30:39SQL> select sysdate from dual;SYSDATE
-------------------
2012-04-25 22:31:20SQL>
2、在plsql中,config--user interface --NLS option 可以设置在plsql中日期时间的显示格式。仅生效在plsql中
11和13楼是高手。膜拜。。
按照2位说的。问题是可以解决了。不过还有个疑问想请教一下
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
这条语句是执行一次之后,以后所有的日期格式会话都是'yyyy-mm-dd hh24:mi:ss'吗?
关掉PL/SQL再次打开,sysdate还仍然是这个'yyyy-mm-dd hh24:mi:ss'格式吗?
alter system
今天试过您的方法。
这句话 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; 在我的PL/sql version7.0.3 中执行无效的错误,如果改为alter system set .. 就报alter system 的选项无效的错。
去查了下,又试了 alter system set nls_date_format = 'yyyy-mm-dd hh24:mi:ss' scope=spfole.貌似也报同样的错。不知道您上面的语句是怎么执行成功的呢?另外。我的操作系统所日文version.PL/SQL也是日文的。config --user interface 对应的日文没找到呢,又在工具-选项中找了个遍,也没找到呢,能麻烦说的更详细些吗
这句SQL> select to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:m
i:ss') from dual; -- 结果输出 2012/04/26 11:11:48
和 select sysdate from dual ; --结果输出 2012/04/26 11:11:48 在我的PL/sql中不进行alter nls_date_formart 也可以出来结果的。但我在框架中执行
insert into
table(
a,
b,
c
)values (
&a,
&b,
nvl(&c,to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'))
之后。插入数据库中的数据就没时分秒。于是, 我这样写。alter nls_date_formart(我的PL/sql修改不鸟nls_date_formart) ,修改过注册表(出重启过pl/sql,重启过电脑)。时分秒出不来。declare
begin
dbms_output.put_line(to_date(to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss') );
end;控制台
-----
12-04-26我郁闷了求解阿。我说的是不是有点复杂阿