Sql server 将SQL Server中的日期转换为日期时间

Sql server 将SQL Server中的日期转换为日期时间,sql-server,tsql,datetime,sql-server-2012,Sql Server,Tsql,Datetime,Sql Server 2012,在数据库表(SQL Server 2012)中,我将日期保存为yyyxxx格式,其中xxx是一年中的一天。例如2015-08-11是2015223 如何有效地将此格式转换为DATETIME?将日期时间转换为这种格式怎么样?获取年份部分,转换为日期时间+添加天数 DECLARE @var NVARCHAR(100) = '2015223'; SELECT CAST(LEFT(@var, 4) AS DATETIME) + CAST(RIGHT(@var, 3) AS INT) - 1; 或:

在数据库表(SQL Server 2012)中,我将日期保存为
yyyxxx
格式,其中
xxx
是一年中的一天。例如
2015-08-11
2015223


如何有效地将此格式转换为
DATETIME
?将日期时间转换为这种格式怎么样?

获取年份部分,转换为日期时间+添加天数

DECLARE @var NVARCHAR(100) = '2015223';

SELECT CAST(LEFT(@var, 4) AS DATETIME) +  CAST(RIGHT(@var, 3) AS INT) - 1;
或:

或者,如果yyyxxx为INT:

DECLARE @var INT = 2015223;

SELECT DATEADD(dd,(@var%1000)-1, CAST(CAST((@var/1000) AS NVARCHAR(100)) 
               AS DATETIME));

既然第一个问题有一个很好的答案,让我们来谈谈第二个问题

把DATETIME转换成这种格式怎么样

函数可以帮助解决这个问题。看起来是这样的:

SELECT DATENAME(year, @var) + RIGHT('00' + DATENAME(dayofyear, @var), 3)

如果dayofyear值可能小于3个符号,您可以使用
CAST(SUBSTRING(@var,5,3)作为INT)
@Smileek我假设它的格式是YYYYXX,所以“2015023”是的,我不是想说您错了。在不同的情况下,只是一个小小的加法。在添加到2015年1月1日之前,天数不应该减去1吗?我得到的结果是2015-08-12,而不是原始问题中建议的2015-08-11。最好的办法是停止在datetime以外的任何数据类型中存储datetime值。
SELECT DATENAME(year, @var) + RIGHT('00' + DATENAME(dayofyear, @var), 3)