十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
截取本周第一天:
创新互联长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为河口企业提供专业的网站制作、成都网站制作,河口网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
SQL select sysdate,trunc(sysdate,'d') from dual;
SYSDATE TRUNC(SYSDATE,'D')
------------------- -------------------
2009-03-24 21:29:32 2009-03-22 00:00:00
有几周,把每个月的最后一天拼成串传到如下SQL:
select to_char(to_date('20111031','yyyymmdd'),'w') from dual;
每周日期段没找到直接的,可以自己写个函数:
1、获取1号是周几,如周4;
2、则1-4号为第一周,即1号+(7-4)天=4号;
3、循环:4+1=5号——4+7=11号为第二周;
直到:某周加完后的日期,大于该月的最大天数,则取该月最大天数收尾,循环结束;
第二种方法是你建个存日期的表:
date week
……
20110101
20110102
……
里面存N年的日期,然后根据
select to_char(to_date('20111031','yyyymmdd'),'w') from dual; 把week字段update进去;
然后直接根据这张表写SQL就直接获取几周,每周是几号到几号了。。。
使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0 //查询当天日期在一周年的数据 select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0 //查询当天的所有数据 SELECT * F...
参考 oracle11g行变列两种办法的比较:
方法1:优点是分析函数,缺点:返回log,低效,
select link_pid, replace(strs,',','|') all_forms
from
(select t.link_pid,
wmsys.wm_concat(t.form_of_way)
over(partition by t.link_pid order by t.form_of_way ) strs,
row_number() over(partition by t.link_pid order by t.form_of_way) RN,
count(1) over(partition by t.link_pid ) CNT
from rd_link_form t
) where RN=CNT
方法2:优点是高效,返回char,缺点:不是分析函数
select t.link_pid,
listagg(t.form_of_way, '|')
within group (order by t.form_of_way ) all_forms
from rd_link_form t
group by t.link_pid
listagg()需在11.2版本下才行
两种方法的比较:依link_pid去重后有23万的数据量,方法1的wmsys.wm_concat用3小时看不到结果,方法2的listagg用80秒看到结果
【我以字典表user_tab_columns改写了上述SQL,如下,大家直接执行就行:】
方法1:
select table_name, replace(strs, ',', '|') all_forms
from (select t.table_name,
wmsys.wm_concat(t.COLUMN_NAME) over(partition by t.table_name order by t.COLUMN_NAME) strs,
row_number() over(partition by t.table_name order by t.COLUMN_NAME) RN,
count(1) over(partition by t.table_name) CNT
from user_tab_columns t)
where RN = CNT
方法2:
select t.table_name,
listagg(t.COLUMN_NAME, '|')
within group (order by t.COLUMN_NAME ) all_forms
from user_tab_columns t
group by t.table_name
大家可以直接在自己的pl/sql中运行上述SQL
通过 对日期, 进行 TRUNC 的操作, 按 'W' 进行 截取。
也就是 取得 本周第一天的操作。
下面是 取 年/季度/月/周/日期/小时 截取的例子。
SQL 执行的时间是 2010-10-17 22点多
SQL SELECT 'Year' AS truncType , TRUNC( SYSDATE, 'YYYY' ) FROM DUAL
2 UNION ALL
3 SELECT 'Quarter' AS truncType, TRUNC( SYSDATE, 'Q' ) FROM DUAL
4 UNION ALL
5 SELECT 'Month' AS truncType, TRUNC( SYSDATE, 'MM' ) FROM DUAL
6 UNION ALL
7 SELECT 'Week' AS truncType, TRUNC( SYSDATE, 'W' ) FROM DUAL
8 UNION ALL
9 SELECT 'Day' AS truncType, TRUNC( SYSDATE, 'D' ) FROM DUAL
10 UNION ALL
11 SELECT 'Hour' AS truncType, TRUNC( SYSDATE, 'HH' ) FROM DUAL;
TRUNCTYPE TRUNC(SYSDATE,'YYYY
-------------- -------------------
Year 2010-01-01 00:00:00
Quarter 2010-10-01 00:00:00
Month 2010-10-01 00:00:00
Week 2010-10-15 00:00:00
Day 2010-10-17 00:00:00
Hour 2010-10-17 22:00:00
6 rows selected.
有了 开始日期, 结束日期, 就是 开始 日期 + 6 就可以了。
where
'2012-07-11 00:00:00'to_char(r.timetag,'yyyy-MM-dd hh24:mi:ss')
and
'2012-07-12 00:00:00'to_char(r.timetag,'yyyy-MM-dd hh24:mi:ss')
and
r.status=10
修改成:
--获取本周的数据,你也可自己修改为固定第几周的数据。
where
to_char(r.timetag,'WW') =to_char(sysdate,'WW')--这里表示本周,如果第10周,这里直接改为'10'即可
and
to_char(r.timetag,'YYYY') = to_char(sysdate,'YYYY') --这里表示本年的,如果要2011年,就直接改为'2011'
and
r.status=10