获得第一年的日期......这是错误的和/或不好的?

时间:2016-01-08 14:32:52

标签: sql-server

因此,每次我查找SQL查询以返回一年的第一天时,我都会得到这个... Stackoverflow great answer

   SELECT
   DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, -1) AS EndOfYear

使用下面有什么问题吗?

SELECT CONVERT(DATE,CONVERT(CHAR(4), Year(Getdate())) + '0101')

就我个人而言,我觉得这个更容易立即理解。

谢谢!

3 个答案:

答案 0 :(得分:3)

取决于你的意思"错误"。

另一个可能更快,因为它以日常格式保存日期,这实际上是SQL Server中的数字数据,而SQL Server通常使用数字比使用字符串更快。另外还有将日期转换为字符串并返回的开销。

但是这种性能差异非常小,所以这取决于你是否更喜欢这种额外的性能,或者代码更容易阅读和理解。

答案 1 :(得分:1)

如果你想在处理字符串上花费一些额外的CPU周期,那就没什么错。

我已经看到使用日历表带来的巨大好处 有很多例子,你可以找到一个here

答案 2 :(得分:0)

更容易理解???这不是评论的意思吗?

在我看来,对数据库做的最重要的事情是确保数据准确。第二个最重要的是使代码快速。正如其他人所指出的那样,执行时间差可能只有几个计算机周期。问题是......你可以在一个有1亿行的表上执行它,突然间那些额外的时钟周期需要几分钟。

当人们使用“易于理解”的代码时,我们没有任何问题。在这种情况下,你会更清楚。使用较慢的代码是错误的。如果您想让它易于理解,请在代码中添加注释。