Convert day of year to datetime in SQL Server

蓝咒 提交于 2019-12-11 03:12:53

问题


In a database table (SQL Server 2012), I have dates saved in the yyyyxxx format, where xxx is the day of the year. For example 2015-08-11 is 2015223.

How can I efficiently convert this format to DATETIME? How about converting DATETIME to this format?


回答1:


Get the Year part, convert to datetime + add days

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

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

Or:

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

SELECT DATEADD(dd,CAST(RIGHT(@var, 3) AS INT)-1, CAST(LEFT(@var, 4) AS DATETIME))

Or if yyyyxxx is INT:

DECLARE @var INT = 2015223;

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

LiveDemo




回答2:


Since there is a good answer for the first question, let's talk about the second one.

How about converting DATETIME to this format?

DATENAME function can help to solve it. It's gonna look like that:

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


来源:https://stackoverflow.com/questions/32331704/convert-day-of-year-to-datetime-in-sql-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!