【问题标题】:select records weekly from Oracle table每周从 Oracle 表中选择记录
【发布时间】:2013-08-15 13:25:36
【问题描述】:

我需要根据日期数据类型字段从 oracle 表中选择当前日历周的记录。目前我正在这样做:

select * from my_table where enter_date > sysdate -7

如果今天是星期四,则此查询将选择从今天开始 7 天后渗透到上周星期四的记录。有没有办法动态选择当前日历周的记录?

【问题讨论】:

  • 如果我得到你,那么星期一到星期四就像今天是星期四一样吗?
  • 可能重复here
  • Yes Roms 那就是我需要选择 Only the records for the current Calendar week.
  • 漫谈关于第二天的问题。我问的是当前周。
  • @Stanley,该帖子回答了如何获取一周的开始日期。

标签: sql oracle11g


【解决方案1】:

如果您的一周从星期一开始,那么:

select ...
from   ...
where  dates >= trunc(sysdate,'IW')

对于一周的第一天的替代定义,trunc(sysdate,'W') 截断到当前月份开始的星期几,trunc(sysdate,'WW') 截断到本年度开始的那一周。

在此处查看其他可用的截断:http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions255.htm#i1002084

【讨论】:

    【解决方案2】:

    to_char(sysdate, 'd') 返回 [1..7] 范围内的星期几;所以尝试使用

    select *
      from my_table
     where enter_date >= trunc(sysdate) - to_char(sysdate, 'd') + 1
    

    【讨论】:

    • 对不起,我是一个完整的 sql 初学者,这和 select * from church_income_expense where TRAN_DATE>= trunc(sysdate, 'ww') 一样吗?
    • 没有。请参阅docs.oracle.com/cd/B19306_01/server.102/b14200/…“WW - 一周中的同一天与一年中的第一天”;所以 trunc(sysdate, 'ww') 将返回最近的星期二,因为 2013 年 1 月 1 日是星期二...
    • 好的,谢谢先生,我很感激。
    • 这种方法有一个特点(我不说优劣,它只是“一个东西”),它对NLS_TERRITORY很敏感。如果在给定的国家/地区一周的第一天是星期日,那么此方法将反映这一点,而不是星期一。
    【解决方案3】:

    Here is the SQLFiddel Demo

    以下是您可以尝试的查询

    select Table1.* 
      from Table1 
     where dates > sysdate - TO_CHAR(SYSDATE,'D')
    

    【讨论】:

    • 抱歉,您必须截断 sysdate 以便从日期一中消除时间分量:成像,该 sysdate 是 '15.08.2013 19:50:15.123'。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多