在数据库表(SQL Server 2012)中,我保存了日期格式为yyyyxxx
,其中xxx
是一年中的第几天。例如2015-08-11
对应2015223
。
如何高效地将这种格式转换为DATETIME
?将DATETIME
转换为这种格式怎么做?
在数据库表(SQL Server 2012)中,我保存了日期格式为yyyyxxx
,其中xxx
是一年中的第几天。例如2015-08-11
对应2015223
。
如何高效地将这种格式转换为DATETIME
?将DATETIME
转换为这种格式怎么做?
DECLARE @var NVARCHAR(100) = '2015223';
SELECT CAST(LEFT(@var, 4) AS DATETIME) + CAST(RIGHT(@var, 3) AS INT) - 1;
或者:
DECLARE @var NVARCHAR(100) = '2015223';
SELECT DATEADD(dd,CAST(RIGHT(@var, 3) AS INT)-1, CAST(LEFT(@var, 4) AS DATETIME))
或者如果yyyyxxx是INT类型:
DECLARE @var INT = 2015223;
SELECT DATEADD(dd,(@var%1000)-1, CAST(CAST((@var/1000) AS NVARCHAR(100))
AS DATETIME));
CAST(SUBSTRING(@var, 5, 3) AS INT)
。 - Smileek既然第一个问题已经有了好的答案,那我们来谈谈第二个问题吧。
如何将DATETIME转换为这种格式?
DATENAME函数可以帮助解决它。它会看起来像这样:
SELECT DATENAME(year, @var) + RIGHT('00' + DATENAME(dayofyear, @var), 3)