请各位帮帮我看一个存储过程

we_homder 2008-11-18 09:24:01
问题一:
strTimePoint := ' 08:00:00';
datBEGINDATE := to_date(to_char((sysdate - 1),'yyyy-mm-dd')||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');
datENDDATE := to_date(to_char((sysdate),'yyyy-mm-dd')||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');

datMonthStart := to_date(to_char((sysdate-1),'yyyy')||'-'||to_char((sysdate-1),'mm')||'-01'||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');
datYearStart := to_date(to_char((sysdate-1),'yyyy')||'-01-01'||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');
我在跟踪调试的过程中,发现datBEGINDATE /datENDDATE 这个是有值的,datMonthStart /datYearStart 这两个却是NUll这是为什么.

问题二:
从存储过程执行的结果来看datMonthStart /datYearStart 并没有取到它的具体时间08:00:00 而是00:00:00 .请问应该如何正确定义.
谢谢大家不吝赐教
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_homder 2008-11-19
  • 打赏
  • 举报
回复
可以了,谢谢各位,结贴.我的经理犯了一个低级失误把 datMonthStart datYearStart 居然定义成字符串类型,我也没有注意.
BlueskyWide 2008-11-18
  • 打赏
  • 举报
回复
不妨在注册表里修改试一下:

在Oracle客户端的注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中,如无系统变量NLS_DATE_FORMAT,则“新建”->“字符串”,重命名为“NLS_DATE_FORMAT”,赋值为:“YYYY-MM-DD HH24:MI:SS”。




[Quote=引用楼主 we_homder 的帖子:]
问题一:
strTimePoint := ' 08:00:00';
datBEGINDATE := to_date(to_char((sysdate - 1),'yyyy-mm-dd')||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');
datENDDATE := to_date(to_char((sysdate),'yyyy-mm-dd')||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');

datMonthStart := to_date(to_char((sysdate-1),'yyyy')||'-'||to_char((sysdate-1),'mm')||'-01'||strTimePoint,'yyyy-mm-dd hh24:mi:Ss');
datYearStart := to_date…
[/Quote]
we_homder 2008-11-18
  • 打赏
  • 举报
回复
大侠你的意思是这个嘛?

datMonthStart := to_date(to_char((sysdate-1),'yyyy')||'-'||to_char((sysdate-1),'mm')||'-01','yyyy-mm-dd') + 1/3;
我跟踪的时候,为何取不到datMonthStart 这个值呢.
datMonthStart := to_date(to_char((sysdate-1),'yyyy')||'-'||to_char((sysdate-1),'mm')||'-01'||strTimePoint,'yyyy-mm-dd hh24:mi:Ss'); 这样写有问题嘛?为何编译能过的?
codearts 2008-11-18
  • 打赏
  • 举报
回复

select trunc(sysdate, 'mm') + numtodsinterval('8', 'hour')
from dual;

sleepzzzzz 2008-11-18
  • 打赏
  • 举报
回复
 -- try it
datBEGINDATE := trunc(sysdate - 1,'dd')+8*60/1440;
datENDDATE := trunc(sysdate,'dd')+8*60/1440;

datMonthStart := trunc(sysdate,'mm')+8*60/1440;
datYearStart := trunc(sysdate,'yyyy')+8*60/1440;
hebo2005 2008-11-18
  • 打赏
  • 举报
回复
直接
trunc(sysdate-1,'mm')+1/3不就是你要的datMonthStart
BlueskyWide 2008-11-18
  • 打赏
  • 举报
回复
参考一下:
http://hi.baidu.com/forhh/blog/item/a6a48326357e34128a82a1f2.html


[Quote=引用 6 楼 we_homder 的回复:]
奶奶的,看不到.blueskywide仁兄的留言,郁闷.
[/Quote]
we_homder 2008-11-18
  • 打赏
  • 举报
回复
奶奶的,看不到.blueskywide仁兄的留言,郁闷.

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧