当前位置: 首页 > 知识库问答 >
问题:

基于月1日比较一些日期谓词

方承弼
2023-03-14

我想从getdate()获取标题(yyyy-mm)中的日期格式,以便在where子句中使用它来获取

共有3个答案

闻人宝
2023-03-14

如果您有一个现有的日期时间,您应该将其与另一个时间进行比较,例如使用between。为什么要进行字符串比较

洪鸿
2023-03-14

简而言之,你不想以你要求的方式做这件事。

要查找与特定年份和月份匹配的记录,只需按以下方式使用两个标准:

declare @SomeDate date = '20180114';    -- This is any date.
-- This gets the first day of the month of the date above.
declare @MonthStart date = dateadd(month,datediff(month,0,@SomeDate),0);
-- This gets the first day of the following month of the date above.
declare @NextMonthStart date = dateadd(month,datediff(month,0,@SomeDate)+1,0);

select cols
from tables
where DateCol >= @MonthStart
  and DateCol < @NextMonthStart;
农波涛
2023-03-14

为什么不能使用

但是,您通常不希望在数据库中执行此操作。谓词如下:

WHERE CONVERT(VARCHAR(10), [DateColumn], 120) >= '2018-02-26'

被视为“非可搜索”,不能使用索引。这意味着服务器将在比较之前对基础列应用强制转换,导致索引扫描或表扫描,具体取决于您的模式。

对于绝大多数情况,您希望将列用作操作数,而无需事先进行任何类型的转换。因此,谓词应表示为:

WHERE [DateColumn] >= '2018-02-26'

这将导致将“2018-02-26”操作数隐式转换为Date或DateTime(无论列类型是什么),这可以使用索引。

绝对最好的是像这样的明确演员阵容:

WHERE [DateColumn] >= CAST('2018-02-26' AS DATETIME)

这样,就不会有错误、隐式转换或非SARGable谓词的空间。

 类似资料:
  • 问题内容: 我在确定仅基于月份和年份的SQL中比较日期的最佳方法时遇到了麻烦。 我们会根据日期进行计算,由于结算是按月进行的,所以该月的日期造成了更大的障碍。 例如 上面的示例将不返回任何行,因为@ date1大于@ date2。因此,我想找到一种摆脱困境的方法。 同样,以下情况由于相同的原因也让我感到悲伤。 我已经完成日期的内联转换,以得出指定日期的月份的第一天和最后一天。 必须有一种更简单的方

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

  • 所以今年早些时候,我在大学里接到了一个任务。任务是使用OOP程序创建一个停车场管理系统。例如,我们学习了如何使用继承、抽象类和实例。我已经完成了并通过了这个作业,所以这个问题只是为了知识目的。其中一个任务是按时间顺序对对象的 Array 列表进行排序。为此,我们学习了可比/比较器方法。但是,我无法理解它,也无法做到这一点。问题是,我们必须对数组列表中的“Vehicle”对象中的“DateTime”

  • 目前,我正努力争取与之相比的约会。更重要的是,我有一个属性Death的人,格式是YYYY-MM-DD,如果这个人已经死了(Death 我尝试了以下做法: 但我只收到来自浏览器的解析错误。我使用的是XSL1.0版,除了xmlns:XSL=“http://www.w3.org/1999/XSL/transform”之外,没有任何名称空间。

  • 我有一个rails生成的日期和一个jQuery生成的日期。 导轨日期打印如下: jQuery日期打印如下: 我想检查jQuery日期是大于还是小于rails日期。但是不管日期如何,jQuery日期总是被解释为比rails日期大。 为什么会这样,我怎样才能成功地比较这两个日期? 更新: 事实上,我刚刚发现问题在于它只允许1969年之前的日期。我打算代码只允许18岁以上的日期。有人知道为什么不同吗?

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