Sql server 什么';在SQL Server中,对指定日期执行数学运算的最佳方法是什么?

Sql server 什么';在SQL Server中,对指定日期执行数学运算的最佳方法是什么?,sql-server,tsql,date,Sql Server,Tsql,Date,这与,但我更进一步: 我正在SQL Server表上编写查询,希望获取当前日历年和上一日历年的所有记录。现在,我需要一个查询来返回2008年1月1日到今天之间的所有记录。但到了2010年1月1日,我希望它能返回不早于2009年的记录 基本上,我想将当前日期限定为年初,然后减去1 在翻阅了一些SQL Server文档后,我得出了以下结论: WHERE create_date >= CAST((CAST(YEAR(GETDATE()) AS int) -1) AS varchar) 但

这与,但我更进一步:

我正在SQL Server表上编写查询,希望获取当前日历年和上一日历年的所有记录。现在,我需要一个查询来返回2008年1月1日到今天之间的所有记录。但到了2010年1月1日,我希望它能返回不早于2009年的记录

基本上,我想将当前日期限定为年初,然后减去1

在翻阅了一些SQL Server文档后,我得出了以下结论:

   WHERE create_date >= CAST((CAST(YEAR(GETDATE()) AS int) -1) AS varchar)

但感觉有点难看。有更好的方法吗?

为什么不在创建日期上使用年份功能呢

WHERE YEAR(create_date) >= (YEAR(GETDATE()) -1)

这假设(正如您所做的那样)数据库中没有大于今天日期的记录

为什么不在create_date上使用year函数呢

WHERE YEAR(create_date) >= (YEAR(GETDATE()) -1)

这假设(正如您所做的那样)数据库中没有比今天日期更大的记录

我建议为变量分配一个日期为lastyear-01-01的变量,或者为它生成一个UDF,或者类似的方法

DECLARE @startOfLastYear DATETIME
SET @startOfLastYear = CAST(YEAR(GETDATE()) - 1 AS VARCHAR) + '-01-01'   
然后执行查询:

WHERE  create_date >= @startOfLastYear
原因有两个:

  • 使用YEAR()或任何其他函数 表中的数据(即。 年份(创建日期)生成指数 无法使用并降低了成本 查询的性能
  • 变量名准确地说明了它是什么,读取代码更容易

  • 我建议指定一个日期为lastyear-01-01的变量,或者为它创建一个自定义项,或者类似的东西

    DECLARE @startOfLastYear DATETIME
    SET @startOfLastYear = CAST(YEAR(GETDATE()) - 1 AS VARCHAR) + '-01-01'   
    
    然后执行查询:

    WHERE  create_date >= @startOfLastYear
    
    原因有两个:

  • 使用YEAR()或任何其他函数 表中的数据(即。 年份(创建日期)生成指数 无法使用并降低了成本 查询的性能
  • 变量名准确地说明了它是什么,读取代码更容易