Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在python中比较日期(yyyy-mm-dd)和年-季度(yyyyQQ)_Sql_Python 3.x_Pandas - Fatal编程技术网

Sql 如何在python中比较日期(yyyy-mm-dd)和年-季度(yyyyQQ)

Sql 如何在python中比较日期(yyyy-mm-dd)和年-季度(yyyyQQ),sql,python-3.x,pandas,Sql,Python 3.x,Pandas,我正在用python编写一个sql查询。在where子句中,我需要将日期列(比如2016年10月21日的审核日期)与该值“2016Q4”进行比较。换句话说,如果审查日期在2016年第四季度或之后,则将选择这些日期。现在,我如何将审核日期转换为与“yyyq4”格式类似的格式。有任何python函数可以实现这一点吗?如果没有,我该如何写一个呢?我建议将您的审核日期转换为季度格式。然后检查它们是否相等 范例 SELECT (CONVERT(VARCHAR(4),DATEPART(YYYY, GETDA

我正在用python编写一个sql查询。在where子句中,我需要将日期列(比如2016年10月21日的审核日期)与该值“2016Q4”进行比较。换句话说,如果审查日期在2016年第四季度或之后,则将选择这些日期。现在,我如何将审核日期转换为与“yyyq4”格式类似的格式。有任何python函数可以实现这一点吗?如果没有,我该如何写一个呢?

我建议将您的审核日期转换为季度格式。然后检查它们是否相等

范例

SELECT (CONVERT(VARCHAR(4),DATEPART(YYYY, GETDATE())) + 'Q' + 
        CASE 
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 3 THEN '1'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 6 THEN '2'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 9 THEN '3'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 12 THEN '4' 
        END)
SELECT(CONVERT(VARCHAR(4),DATEPART(YYYY,GETDATE())+'Q'+
案例

当转换(VARCHAR(2),DATEPART(M,GETDATE())时,您可以将月份转换为一个变量:mon

您可以使用以下代码获取季度信息:

范围(1,13)内的mon的
:
打印(mon-1)//3+1,
打印

这将返回:

  • 第1-3个月:1
  • 第4-6个月:2
  • 第7-9个月:3
  • 第10-12个月:4

理想情况下,这个解决方案可能会起作用,我也是这么想的,但在pd.read\u sql()中使用DATEPART时,它不起作用并显示此错误:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。我可以看到这在某个范围内是如何工作的。但是,如果我有名为“month”(值范围为1到12)的列/数据框,我应该如何使用for循环?
WHERE (CONVERT(VARCHAR(4),DATEPART(YYYY, GETDATE())) +  CASE 
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 3 THEN 'Q1'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 6 THEN 'Q2'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 9 THEN 'Q3'
            WHEN CONVERT(VARCHAR(2),DATEPART(M,GETDATE())) <= 12 THEN 'Q4' 
        END) = '2018Q1'