【问题标题】:Dynamically Declare Start/End Dates From Current Month从当前月份动态声明开始/结束日期
【发布时间】:2017-10-31 13:36:23
【问题描述】:

我有一个每月运行的非常基本的查询。每个月我都必须手动更改查询以适应当前月份的开始和结束日期。我已经尝试使用以前答案中的一些示例,但似乎无法使其正常工作。值得注意的是,因为我试图包括整个月的最后一天,如我的 23:59:59 参数所示。实现这一目标的最佳方法是什么?

SELECT *
FROM WorkOrder
where active = 1 and
WorkOrderStatusId in (6,8) AND
dateCreated >= '5/1/2017' and
dateCreated <= '5/31/2017 23:59:59'

【问题讨论】:

  • 哪个sql数据库?

标签: mysql sql sql-server oracle datetime


【解决方案1】:

你实际上可以做的是得到月份和年份

SELECT *
FROM WorkOrder
where active = 1 and
WorkOrderStatusId in (6,8) AND
year(dateCreated) = 2017
month(dateCreated) = 5  

【讨论】:

    【解决方案2】:

    三件事:

    首先:在大多数 DBMS 表示中,日期看起来像 2017-05-01 而不是 5/1/2017

    第二:你想要这种表达式(注意&lt;)来确保你得到所有的行。这比23:59:59 的东西更好。

    where  dateCreated >= '2017-05-01'
      and  dateCreated <  '2017-06-01'
    

    第三,你可能想要一种表达方式

     where dateCreated >= first_day_of_last_month
       and dateCreated <  first_day_of_this_month
    

    您不必每个月都更改查询。

    这在不同品牌和型号的数据库服务器中的工作方式不同。你没有告诉我们你用的是哪一个,所以......

    在 MS SQL Server 中,DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE()) 为您提供本月的第一天,所以

    where dateCreate >= 
             DATEADD(MONTH, -1, DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE()))
      and dateCreate < 
             DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE())
    

    在 MySQL 中,DATE_FORMAT(CURDATE(), '%Y-%m-01') 在本月的第一天给你午夜,所以这个 where 子句获取上个月的行。

    where dateCreated >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 1 MONTH
      and dateCreated <  DATE_FORMAT(CURDATE(), '%Y-%m-01')
    

    在 Oracle 中(提示 如果我是一个有钱人,来自 屋顶上的提琴手TRUNC(SYSDATE, 'MM') 给你一个月的第一天,所以这是上个月的行.

    where dateCreate >= ADD_MONTHS(-1, TRUNC(SYSDATE, 'MM'))
      and dateCreate <  TRUNC(SYSDATE, 'MM')
    

    【讨论】:

    • 非常感谢您的回复!我正在使用 Microsoft SQL。我很抱歉没有提及,我总是假设如果我没有指定 MySQL(它是 Linux,对吗?)MS SQL 是默认的。我对数据库了解不多,所以我很感激这些信息。我一定会在未来指定:)
    • 如果您在答案解决了您的问题时选中绿色复选框,这对社区很有帮助。 MySQL 和 Oracle 都运行在 Windows / Linux / FreeBSD 上。 MySQL 也可以在 Mac 上运行。 Microsoft SQL Server 仅在 Windows 上运行(它们有一个原型 Linux 版本)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多