如何使用Python或SQL计算过去的X周天数?

如何使用Python或SQL计算过去的X周天数?,python,mysql,sql,datetime,Python,Mysql,Sql,Datetime,我需要精确计算过去5周的天数。e、 g.如果今天的日期是2015-05-07,我需要我的计划给我2015-04-30 到目前为止我试过的是这个吗 today = datetime.date.today() - datetime.timedelta(5) 这正好是过去的5天。但我需要回到过去的第五个工作日。 我之所以需要这样做,是因为我有一个包含一些数据的数据库表,我需要编写一个Python脚本来获取过去5天的数据。过去的5天只是: select date_sub(CURDATE(), inte

我需要精确计算过去5周的天数。e、 g.如果今天的日期是2015-05-07,我需要我的计划给我2015-04-30

到目前为止我试过的是这个吗

today = datetime.date.today() - datetime.timedelta(5)
这正好是过去的5天。但我需要回到过去的第五个工作日。
我之所以需要这样做,是因为我有一个包含一些数据的数据库表,我需要编写一个Python脚本来获取过去5天的数据。

过去的5天只是:

select date_sub(CURDATE(), interval 5 day)
如果你说星期一是指周一至周五,那么逻辑其实相当简单。5周是一周,也就是7天(至少在美国)。所以你的问题的答案是

select date_sub(CURDATE(), interval 7 day)

请注意,其他天数将需要更复杂的逻辑,使用
CASE

Python
datetime
对象有一个
isoweekday()
方法来帮助实现这一点。此方法返回与星期几对应的数值。例如,星期一是整数1。你想跳过周六和周日,它们分别对应于6和7。我们可以用它来回溯:

from datetime import datetime, timedelta                                              

def workingday(d, no_of_days):                                                              
    backdate = d                                                                      
    count = 0                                                                         
    while count < no_of_days:                                                                  
        backdate = backdate - timedelta(1)                                              
        if backdate.isoweekday() in (6,7):                                            
            continue                                                                  
        count += 1                                                                    
    return backdate.strftime("%Y-%m-%d")


d = datetime.strptime("2015-05-07","%Y-%m-%d")                                        
print workingday(d, 5)

Output:

2015-04-30 
从datetime导入datetime,timedelta
def工作日(d,无工作日):
回溯日期=d
计数=0
当计数<无天数时:
回溯日期=回溯日期-时间增量(1)
如果backdate.isoweekday()位于(6,7)中:
继续
计数+=1
返回backdate.strftime(“%Y-%m-%d”)
d=datetime.strtime(“2015-05-07”,%Y-%m-%d”)
打印工作日(d、5)
输出:
2015-04-30 
我用过你的约会方式。但你可以很容易地改变这一点


您可以使用
weekday()
而不是
isoweekday()
,但是现在星期一将返回为0,星期天将返回为6。

在mysql中:
DATE\u ADD(now(),INTERVAL-5天)
在transact-sql中:DATEADD(DAY,-5,CURDATE())@JeremyC.,这不是常规sql。也许MS SQL?是transact,我的错我编辑过它适用于SQL server 2008和更新版本以及azure SQL数据库国家假日呢?他们应该算还是不算?工作日根据哪个地区?谢谢最后我在python方面得到了一些帮助。