2014年第42周周日的日期,参考
select next_day(to_date('2014-01-01','yyyy-mm-dd'),1)-14+42*7 D from dual;
select next_day(to_date('2014-01-01','yyyy-mm-dd'),1)-14+42*7 D from dual;
解决方案 »
- 【求助】进来看看我的触发器写的哪里有问题????
- oracle技术问题
- ORACLE10G下存储过程执行中的一个内部问题忘高人指点~~
- 触发器更新另一表的字段
- 执行一个程序时,卡在那儿15秒,才出结果
- 这样创建自增长不是很好,因为在长到009的时候,就会到0010,而实际上应该是010,我应该如何创建呢?
- 求结果集中最大长度的记录
- 问题急!各位大虾请进阿!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 请问oracle中,能否用sql语句将long整形的数字,转换成一个date类型。
- 没人能回答的问题,我再贴!!!
- win7 访问oracle 9i数据库速度慢
- oracl11 select 一行显示成多行,怎么办?
select max(dt) + 1
from (select to_date('20140101', 'yyyymmdd') + level dt
from dual
connect by to_char(to_date('20140101', 'yyyymmdd') + level, 'iw') <> 10);
select to_date('20140101000000','yyyymmddhh24miss')+(42-1)*7 firstday from dual
我找出的42周第一天是10月15日
难道2014-1-1是周三就用周三当第一天了,那倒简单了
to_date('2014-01-01','yyyy-mm-dd')+(42-1)*7
from (select to_date('20140101', 'yyyymmdd') + decode(level, 1, 0, level) dt
from dual
connect by to_number(to_char(to_date('20140101', 'yyyymmdd') + level - 1,
'iw')) < 1);
WITH PARAMS AS (SELECT TRUNC(TO_DATE('2009-01-01','YYYY-MM-DD'),'YYYY') AS SD FROM DUAL)
SELECT LEVEL 周次,
DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,
NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2))
当周第一天,
DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,
NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) + 6
当周最后一天
FROM DUAL D
LEFT JOIN PARAMS PM ON 1=1
CONNECT BY LEVEL<=53
--按照周日到周六为一周算周的开始时间和结束时间(D)
SELECT LEVEL 周次,(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7 当周第一天,
(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7+6 当周最后一天
FROM DUAL CONNECT BY LEVEL<=53
--按照ORACLE标准(WW)
SELECT LEVEL 周次,TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7 当周第一天,
TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7+
DECODE((TO_CHAR(TO_DATE('2013-12-31','YYYY-MM-DD'),'DDD')-(LEVEL-1)*7),1,0,2,1,6) 当周最后一天
FROM DUAL CONNECT BY LEVEL<=53
这是在网上看到的,数据库中应该用什么标准呢?是(ww)吧
select
greatest(next_day(to_date('2014-01-01','yyyy-mm-dd'),2)-14+42*7
,to_date('2014-01-01','yyyy-mm-dd'))
D from dual;
但是,放在过程里面,ecardid截取的是di,32011101220000005066根本就没有传进去,但是如果直接换成32011101220000005066,就是正确的了,为什么啊?过程里面的语句是:sqlstr:='create table '||CardTable||' as
select ecardid,greatest(next_day(to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd''),2)-14+substr(ecardid,7,2)*7,to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd'')) issuedate
from '||tbl_sexit||'
sqlstr:='create table '||CardTable||' as
select '''||ecardid||''',greatest(
next_day(to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd''),2)-14+'||substr(ecardid,7,2)||'*7
,to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd'')) issuedate
from '||tbl_sexit||'
select ecardid,greatest(next_day(to_date(''20''||substr(ecardid,5,2)||''-01-01'',''yyyy-mm-dd''),2)-14+substr(ecardid,7,2)*7,to_date(''20''||substr(ecardid,5,2)||''-01-01'',''yyyy-mm-dd'')) issuedate
from '||tbl_sexit;
问题已经解决了,ecardid不是参数,问题出现在''||substr(ecardid,5,2)||''