`YEAR(OrderDate)`和`DATEPART(year,OrderDate)`之间有什么区别?

时间:2017-11-08 17:37:49

标签: sql sql-server tsql sql-function

假设OrderDate是日期。 YEAR(OrderDate)DATEPART(year,OrderDate)(或DATEPART(yyyy,OrderDate)DATEPART(yy,OrderDate))之间有什么区别?感谢。

3 个答案:

答案 0 :(得分:4)

他们都是一样的:

SELECT DATEPART(yy,GETDATE()), DATEPART(yyyy,GETDATE())
     , DATEPART(year, GETDATE()), YEAR(GETDATE());

来自doc

  

年 - > yy,yyyy(缩写)

我会DATEPART使用year遵循EIBTI原则(明确比隐含更好)

还有一种可能性ODBC function

SELECT  {fn YEAR(GETDATE())};

例如,要获取HOUR,您无法使用内置函数:

SELECT HOUR(GETDATE())
-- error

SELECT DATEPART(hour, GETDATE())
-- datepart function

SELECT {fn HOUR(GETDATE())}
-- will work

<强> Rextester Demo

答案 1 :(得分:1)

我尝试考虑与其他语言的兼容性,包括SQL风格。其他Microsoft产品(如C和VB)支持DATEPART。但MySQL支持Year()。因此,选择权取决于您的生态系统以及您最终可能将代码迁移到哪些内容。

答案 2 :(得分:1)

只是为了好玩,DateName()返回字符串值。

示例

Select 'Year '+datename(year,GetDate())

<强>返回

Year 2017