仅转换SQL Server中日期时间的年份部分

时间:2012-11-02 19:20:13

标签: sql sql-server-2008

还有其他更简单的方法将日期时间作为当年的一部分吗?如果没有,哪一个表现更好?

尝试#1:

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

尝试#2:

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

2 个答案:

答案 0 :(得分:2)

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

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

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

你的第二种方法更可靠

答案 1 :(得分:2)

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

我通常会优先使用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。