2

Any other easier way to bring the year part of a datetime to current year? If not, which one is better performance wise?

Attempt #1:

CAST(DATEPART(MONTH, mydate) AS VARCHAR) + '/' + 
CAST(DATEPART(DAY, mydate) AS VARCHAR) + '/' +
CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME 

Attempt #2:

DATEADD(YEAR, DATEDIFF(YEAR,  mydate, GETDATE()), mydate)
4

2 回答 2

3

性能差异可以忽略不计,无论哪个更快。差异将在微秒范围内。

我通常使用 DATEADD + DATEDIFF 作为偏好。VARCHAR 版本的正确格式是使用 ISO-8601 格式 YYYYMMDD,例如

CAST(STUFF(CONVERT(char(8),mydate,112),1,4,YEAR(GETDATE())) as DATETIME)

CONVERT(,,112)=> YYYYMMDD。STUFF 用当前年份替换前 4 个字符。YEAR() 返回一个数字,但在 STUFF 的上下文中会自动转换为 varchar。

于 2012-11-02T19:29:16.037 回答
2

不要使用第一种方法。它会产生不可靠的结果。

1/2/2012 可以解释为 2 月 1 日或 1 月 2 日,具体取决于设置

避免使用字符串,尤其是日期。

你的第二种方法更可靠

于 2012-11-02T19:23:38.297 回答