oracle怎么查询上周的数据(例如今天是周日,我要查询出上个周一到周日的数据)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么查询上周的数据(例如今天是周日,我要查询出上个周一到周日的数据)相关的知识,希望对你有一定的参考价值。
--1、取某天在本周中的第几天(默认周日开始算第1天)select to_char(to_date('2011-04-11','yyyy-mm-dd'), 'd') from dual;
--2、如果要从周一开始算第1天,需要做一些手脚
--大概思路是:1变成7,2变成1,3变成2......,7变成6
select decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1)
from dual;
--3、再根据上面的结论倒推到上周时间
select to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1,
to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6
from dual; 参考技术A select * from table
where time between (trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+2) and
(trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+8)追问
11年4月4号是周一,我要查询上周一至上周日的数据,也就是3月28号至4月3号之间的数据!但是4月3号的数据用你的查询语句是查不出来滴
追答我在本地测试的时候是好好的,莫非那个环节出问题了!
在 PHP 中获取上周日的日期
【中文标题】在 PHP 中获取上周日的日期【英文标题】:Get last Sunday date in PHP 【发布时间】:2013-02-18 05:56:42 【问题描述】:我正在使用 cron 作业 为我的数据库生成每周报告。基本上,报告生成脚本是用 PHP 编写的。我安排了一个每日 cron 作业。
我的报告周从星期日开始。
我只希望报告生成脚本生成前一周从上周日到上周一的报告。
举个例子。
今天是 2013 年 3 月 4 日。当脚本运行时,它应该生成 报告时间为 2013 年 2 月 24 日至 2013 年 3 月 3 日。明天,当脚本 运行,它也应该只运行 2013 年 2 月 24 日至 2013 年 3 月 3 日的报告。
如何在我的脚本中自动获取最后一个星期天的日期?
目前,我使用以下代码进行硬编码:
$startDate = strtotime("13 January 2013");
$strStartDate = date ("Y-m-d 00:00:00", $startDate);
$strEndDate = date ("Y-m-d 23:59:00", $startDate + (6*24*60*60));
非常感谢任何帮助。谢谢。
【问题讨论】:
***.com/questions/3742820/… 谢谢,但是如何自动提供第二个参数?那么,脚本可以自动运行,它总是会返回上周日的日期吗?例如,当脚本今天运行时,它应该返回 2013 年 2 月 24 日。is it possible using function?
是什么意思???
【参考方案1】:
上周日
echo date('Y-m-d',strtotime('last sunday'));
编辑答案:
最后一个星期天
echo date('Y-m-d',strtotime('last sunday -7 days'));
【讨论】:
这将返回 2013-03-03。但我需要的是2013-02-24。也许我应该说上周日? @J K:最后一个星期日是 3 月 3 日。 @zerkms 我想他想上周日 @zerkms,对不起,我想我应该说我需要上周日去。苏米特,-7?但是,该脚本将每天运行,并且应该始终在上周日返回,直到下周。例如,今天它应该返回 2013-02-24。明天也应该返回 2013-02-24,后天也应该返回 2013-02-24.... 然后在 10 Mac 2013 上,它将开始返回 2013-03-03。 J K,您的意思是您正在实时生产服务器上进行开发和调试吗?哦,我的...【参考方案2】:<?php
$date=date("Y-m-d");
echo "Current Date : ".$date."<br>";
echo "last Sunday : ".date('Y-m-d', strtotime($date.'last sunday'));
?>
【讨论】:
【参考方案3】:简介
老实说,我不确定is it possible using function?
是什么意思,但我想你想要一个通用函数,但我认为一个简单的类也可以解决问题。
观察
它也应该只运行 2013 年 2 月 24 日至 2013 年 3 月 3 日的报告。
请注意,从Sunday 24 Feb 2013
到Sunday 3 March 2013
是8 days
和大于1 weeks
,如果您正在绘制图形或将其用于分析,这可能会导致overlapping
数据。我建议您将其限制为1 weeks
,即Sunday, 24 Feb 2013
到Saturday, 2 March 2013
这就是我的意思
// imagine today is Today is 4 March 2013
$today = DateTime::createFromFormat("d F Y", "4 March 2013");
$date = new PeroidDate();
vprintf("%s to %s", $date->getPeroid($today));
输出
Sunday, 24 February 2013 to Saturday, 02 March 2013
其他例子
示例 1
// Example
$date = new PeroidDate();
print_r($date->getPeroid());
输出
stdClass Object
(
[start] => Sunday, 31 March 2013
[end] => Saturday, 06 April 2013
)
//or
Sunday, 31 March 2013
示例 2
假设您想获取“2 月 14 日之前”before valentine period
的报告
print_r($date->getPeroid(new DateTime("2013-02-14")));
输出
stdClass Object
(
[start] => Sunday, 03 February 2013
[end] => Saturday, 09 February 2013
)
示例 3
假设您想要一个日期范围而不是单个范围,例如。你想要January 1
st 和Current Time
之间的日期(你可能想用它作为选择框)然后你使用PeroidDate::getBetween
print_r($date->getBetween(new DateTime("2013-1-1"), new DateTime()));
输出
Array
(
[0] => stdClass Object
(
[start] => Sunday, 06 January 2013
[end] => Saturday, 12 January 2013
)
[1] => stdClass Object
(
[start] => Sunday, 13 January 2013
[end] => Saturday, 19 January 2013
)
[2] => stdClass Object
(
[start] => Sunday, 20 January 2013
[end] => Saturday, 26 January 2013
)
[3] => stdClass Object
(
[start] => Sunday, 27 January 2013
[end] => Saturday, 02 February 2013
)
[4] => stdClass Object
(
[start] => Sunday, 03 February 2013
[end] => Saturday, 09 February 2013
)
[5] => stdClass Object
(
[start] => Sunday, 10 February 2013
[end] => Saturday, 16 February 2013
)
[6] => stdClass Object
(
[start] => Sunday, 17 February 2013
[end] => Saturday, 23 February 2013
)
[7] => stdClass Object
(
[start] => Sunday, 24 February 2013
[end] => Saturday, 02 March 2013
)
[8] => stdClass Object
(
[start] => Sunday, 03 March 2013
[end] => Saturday, 09 March 2013
)
[9] => stdClass Object
(
[start] => Sunday, 10 March 2013
[end] => Saturday, 16 March 2013
)
[10] => stdClass Object
(
[start] => Sunday, 17 March 2013
[end] => Saturday, 23 March 2013
)
[11] => stdClass Object
(
[start] => Sunday, 24 March 2013
[end] => Saturday, 30 March 2013
)
[12] => stdClass Object
(
[start] => Sunday, 31 March 2013
[end] => Saturday, 06 April 2013
)
[13] => stdClass Object
(
[start] => Sunday, 07 April 2013
[end] => Saturday, 13 April 2013
)
)
使用的类
class PeroidDate
private $format;
private $interval;
function __construct()
$this->format = "l, d F Y";
$this->interval = new DateInterval('P7D');
function setFormat($format)
$this->format = (string) $format;
function setInterval(DateInterval $format)
$this->format = $format;
function getPeroid(\Datetime $date = null)
$end = $date ? : new DateTime();
$end->modify("Last Sunday");
print_r($end->format($this->format));
$start = clone $end;
$start->sub($this->interval);
$end->modify("-1 day"); //
return (object) array(
"start" => $start->format($this->format),
"end" => $end->format($this->format)
);
function getBetween(Datetime $start = null, Datetime $end = null)
if ($start > $end)
throw new InvalidArgumentException("`Start date` Must be greater than `End date`");
if ($start === null)
$start = new DateTime();
$start->modify("First Sunday of January");
else
$start->modify("First Sunday");
if ($end === null)
$end = new DateTime();
$end->modify("Last Sunday of December");
$range = array();
while ( $start < $end )
$r = new stdClass();
$r->start = $start->format($this->format);
$start->add($this->interval);
$tmp = clone $start;
$tmp->modify("-1 day");
$r->end = $tmp->format($this->format);
$range[] = $r;
return $range;
【讨论】:
【参考方案4】:使用此代码。
echo date('m/d/Y', strtotime('last Sunday'));
你可以根据今天得到上周日。
【讨论】:
【参考方案5】:试试这个
$sun = date('Y-m-d',strtotime('last sunday'));
echo date('Y-m-d', strtotime('last Sunday', strtotime($sun)));
它将返回2013-02-24
【讨论】:
【参考方案6】:由于这个问题也被标记为 MySql,如果您需要计算查询中的间隔,您可以使用以下内容:
SELECT
'2013-03-04' - INTERVAL (WEEKDAY('2013-03-04')+1) % 7 DAY - INTERVAL 1 WEEK start_date,
'2013-03-04' - INTERVAL (WEEKDAY('2013-03-04')+1) % 7 DAY end_date
然后要生成报告,您只需使用 CURDATE():
SELECT *
FROM your_tables
WHERE ... AND
report_date BETWEEN
CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) % 7 DAY - INTERVAL 1 WEEK
AND CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) % 7 DAY
【讨论】:
以上是关于oracle怎么查询上周的数据(例如今天是周日,我要查询出上个周一到周日的数据)的主要内容,如果未能解决你的问题,请参考以下文章