当前位置: 首页 > 面试题库 >

SQL Server日期比较仅基于月份和年份

梁豪
2023-03-14
问题内容

我在确定仅基于月份和年份的SQL中比较日期的最佳方法时遇到了麻烦。

我们会根据日期进行计算,由于结算是按月进行的,所以该月的日期造成了更大的障碍。

例如

DECLARE @date1 DATETIME = CAST('6/15/2014' AS DATETIME),
        @date2 DATETIME = CAST('6/14/2014' AS DATETIME)

SELECT * FROM tableName WHERE @date1 <= @date2

上面的示例将不返回任何行,因为@ date1大于@ date2。因此,我想找到一种摆脱困境的方法。

同样,以下情况由于相同的原因也让我感到悲伤。

DECLARE @date1 DATETIME = CAST('6/14/2014' AS DATETIME),
        @date2 DATETIME = CAST('6/15/2014' AS DATETIME),
        @date3 DATETIME = CAST('7/1/2014' AS DATETIME)

SELECT * FROM tableName WHERE @date2 BETWEEN @date1 AND @date3

我已经完成日期的内联转换,以得出指定日期的月份的第一天和最后一天。

SELECT * 
FROM tableName 
WHERE date2 BETWEEN
    DATEADD(month, DATEDIFF(month, 0, date1), 0) -- The first day of the month for date1
    AND
    DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, date2) + 1, 0)) -- The lastday of the month for date3

必须有一种更简单的方法来执行此操作。有什么建议?


问题答案:

为了处理不等式,例如,我喜欢将日期/时间转换为YYYYMM表示形式(字符串或整数)。对于此示例:

DECLARE @date1 DATETIME = CAST('6/14/2014' AS DATETIME),
        @date2 DATETIME = CAST('6/15/2014' AS DATETIME),
        @date3 DATETIME = CAST('7/1/2014' AS DATETIME);

SELECT * FROM tableName WHERE @date2 BETWEEN @date1 AND @date3;

我将查询写为:

SELECT *
FROM tableName
WHERE year(@date2) * 100 + month(@date2) BETWEEN year(@date1) * 100 + month(@date1) AND
                                                 year(@date3) * 100 + month(@date1);


 类似资料:
  • 我很难确定在SQL中只根据月份和年份来比较日期的最佳方式。 我们根据日期进行计算,并且由于按月计费,因此该月的日期造成了更多的障碍。 比如说 上述示例不会返回任何行,因为@date1大于@date2。所以我想找个方法把这一天从等式中去掉。 同样,下面的情况也同样让我感到悲伤。 我已经完成了日期的内联转换,以导出指定日期的第一天和最后一天。 一定有更简单的方法。有什么建议吗?

  • 问题内容: 我有一张桌子,看起来像: 我想对过去3个月(不包括当月)的数量求和。我的where子句当前看起来像: 它有效,但丑陋和侮辱。关于使其更漂亮有什么建议吗?非常感谢! 问题答案: 没什么好… 但是,可以将嵌套的DATEADD用作计算列和索引列 这使

  • 问题内容: 我需要从具有列的表中抓住一些记录,这是一个(没有时间)。我只需要通过比较年份和月份来过滤记录。例如,我希望所有出生于1990年3月的用户。日子并不重要。 您如何处理? 问题答案: 您可以使用 它将对HQL有效

  • 问题内容: 我有一个表,其中包含有关事件和节日的数据,下面的列记录了它们的开始和结束日期。 开始日期 结束日期 日期格式为。我需要在以下情况下获取事件详细信息。 需要获取所有从当前月份开始的事件,并且结束日期可以说什么。 我对结束日期的概念很清楚。但不确定如何获取开始日期为当前月份的数据。为此,我需要将当前年份和当前月份与数据库中的列进行比较。 谁能帮助我指出我该怎么做? 问题答案:

  • 我想有一个日期选择器,用户可以从日期选择器中只选择月份和年份,我还需要限制从以前的日期选择器中选择月份和年份的下一个日期选择器... 有人能帮我解脱吗?

  • 我使用的是bootstrap datepicker,我的代码如下所示,是JSFIDLE上的代码演示 上面的代码运行良好,但我试图做的是允许用户只选择月份和年份。 你能告诉我怎么做吗?