Python的表达式来查找两个日期之间的数据库字段中的所有日期

问题描述:

我已经构建了一个python脚本,它首先打印上周的所有日期,然后创建两个变量,即第一个和最后一个日期,以便我可以编写一个表达式来查找在这些日期之间的字段中的所有日期。以下是我迄今为止:Python的表达式来查找两个日期之间的数据库字段中的所有日期

import arcpy, sys, string, os, time, shutil, tempfile, logging, datetime 
# this is the current date 
now = datetime.datetime.now() 

# subtract 7 days from the current date 
SevenDaysBack = now - datetime.timedelta(days=7) 

# this is the date of the first day of last week 
now_day_1 = SevenDaysBack - datetime.timedelta(days=now.weekday()) 

dates = {} 
#this lists out all the dates of last week 
for n_week in range(1): 
    dates[n_week] = [(now_day_1 + datetime.timedelta(days=d+n_week*7)).strftime("%Y%m%d") for d in range(7)] 
##for d in range(7): 
    ##dates = [(now_day_1 + datetime.timedelta(days=d*7)).strftime("%Y%m%d")] 
print dates 

From_Date = dates[n_week][0] 
To_Date = dates[n_week][6] 
print From_Date 
print To_Date 

SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date 
print SaleDateExpression 

的脚本工作,直到我试图创建将在以后的函数中使用的表达。我确定它是一个语法问题,但我不知道如何使它工作。

+0

之间“我敢肯定,它的语法问题......”,不是输出任何错误,当您尝试运行呢?如果是这样,请发布错误信息。 –

+0

除非我注释掉表达式,否则我无法通过语法错误来运行它。脚本的其余部分起作用。语法错误突出显示单词“之间”。 –

您的代码在倒数第二行中有一个奇怪点:
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date

您正在谈论的语法错误的出现是因为[DATE_SOLD],因为它在这里是无效的Python;此外,它似乎没有任何用处,因为您没有向我们提供任何有关DATE_SOLD的信息。

因此,取而代之的是,最后一行可能是
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date
这将输出

between20161031and20161106


但是,假设你要输出到多一点可读,有几件事要评论。

首先,您将创建日期作为%Y%m%d,将年,月和日连接在一起而不带空格,从而创建您看到的2016103120161106;为了解决这个问题,你可以输入%Y %m %dstrftime

其次,单词和日期之间没有空格。为了解决这个问题,您可以在between之后和and之前和之后添加一个空格,如下所示"between " + From_Date + " and " + To_Date

最后,在所有这些说明,你的代码将现在输出

之间2016 10月31日和2016年11 06


编辑:

基于断您的评论,似乎唯一的问题是[DATE_SOLD]不在报价单内。为了达到您在[DATE_SOLD] between 20160601 and 20160630评论中提出的结果,您需要在strftime中使用%Y%m%d,并在between之后和and之前和之后添加空格,如上所示。这会给出所需的输出。

[DATE_SOLD] 20160601和20160630

+0

感谢Wintro的帮助。表达式最初来自我建立的模型,它与我的脚本完成同样的事情。当我将模型导出到脚本时,SaleDateExpression代码如下所示:SaleDateExpression = arcpy.GetParameterAsText(0) 如果SaleDateExpression =='#'或不是SaleDateExpression: SaleDateExpression =“[DATE_SOLD] 20160601和20160630之间”和表达式在未包括的脚本部分中被进一步调用。这一个工作,但我不想在我每次运行它之前编辑脚本,所以我用 –

+0

以上的代码替换它@ChristyWest我编辑了我的问题,问题是否解决? –