因此,每次我查找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')
就我个人而言,我觉得这个更容易立即理解。
谢谢!
答案 0 :(得分:3)
取决于你的意思"错误"。
另一个可能更快,因为它以日常格式保存日期,这实际上是SQL Server中的数字数据,而SQL Server通常使用数字比使用字符串更快。另外还有将日期转换为字符串并返回的开销。
但是这种性能差异非常小,所以这取决于你是否更喜欢这种额外的性能,或者代码更容易阅读和理解。
答案 1 :(得分:1)
如果你想在处理字符串上花费一些额外的CPU周期,那就没什么错。
我已经看到使用日历表带来的巨大好处 有很多例子,你可以找到一个here。
答案 2 :(得分:0)
更容易理解???这不是评论的意思吗?
在我看来,对数据库做的最重要的事情是确保数据准确。第二个最重要的是使代码快速。正如其他人所指出的那样,执行时间差可能只有几个计算机周期。问题是......你可以在一个有1亿行的表上执行它,突然间那些额外的时钟周期需要几分钟。
当人们使用“易于理解”的代码时,我们没有任何问题。在这种情况下,你会更清楚。使用较慢的代码是错误的。如果您想让它易于理解,请在代码中添加注释。