熊猫read_sql。如何查询日期字段的where子句

时间:2020-01-06 15:41:04

标签: python sql oracle date

我有一个字段date-year,格式为datetime64 [ns]。

如何在where子句中使用此字段来获取滚动12个月的数据(过去12个月的数据)。

下面的查询不起作用,但是我希望可以过滤12个月的数据。

select * from ABCD.DEFG_TABLE where monthyear > '2019-01-01'

仅供参考-这是一个oracle数据库。如果我可以避免对值2019-01-01进行硬编码,那就太好了!

2 个答案:

答案 0 :(得分:1)

您需要使用datetime并按如下所示设置日期格式。

只需获取您的相对日期,如果您将日期时间格式设为YYYYMMDD,则使用日期时间中的strftime,并将正则表达式字符串设为(“%Y%m%d”)

import datetime
import pandas 
from dateutil.relativedelta import relativedelta


query = "SELECT * FROM ng_scott.Emp"

between_first = datetime.date.today()
between_second = between_first - relativedelta(years=1)


# GET THE DATASET
dataset = pd.read_sql(query , con=engine)

# PARSE THE DATASET
filtered_dataset = dataset[(dataset['DOJ'] > between_first ) & (dataset['DOJ'] > between_second )]

print(filtered_dataset)

答案 1 :(得分:0)

您可以使用纯SQL做到这一点。

以下表达式动态计算1年前几个月的开始时间:

add_months(trunc(sysdate, 'month'), -12)

这句话是:以当月第一天的日期为准,并从中撤回12个月。

您可以将其用作过滤条件:

select * from ABCD.DEFG_TABLE where monthyear > add_months(trunc(sysdate, 'month'), -12)

NB:这假设monthyear的数据类型为date