date in int data type to SQL Date format.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'dbo.Convert_Julian') AND TYPE IN (N'FN', N'IF', N'TF',
N'FS', N'FT'))
DROP FUNCTION dbo.Convert_Julian
GO
CREATE FUNCTION dbo.Convert_Julian(@idate INT)
Returns DATE
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @oDate DATE, @year VARCHAR(10),@intYear INT,@sdate
VARCHAR(10),@noOfDays VARCHAR(10),@intNoOfDays INT,@month INT,@day
INT,@sMonth VARCHAR(10),@sDay VARCHAR(10),@sMonthc VARCHAR(10),@sDayc
VARCHAR(10)
SELECT @sdate=CONVERT(VARCHAR(50),@idate)
IF (@idate=0)
SET @oDate = CAST(0 AS DATETIME)
ELSE BEGIN
SET @year=SUBSTRING(@sdate,1,4)
SET @noOfDays=SUBSTRING(@sdate,5,3)
SELECT @intYear=CONVERT(INT,@year)
SELECT @intNoOfDays=CONVERT(INT,@noOfDays)
IF (@intNoOfDays<=31)
BEGIN
SELECT @month=1
IF(@intNoOfDays=31)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays
END
IF(@intNoOfDays>31 AND @intNoOfDays <= 59)
BEGIN
SELECT @month=2
IF(@intNoOfDays=59)
SELECT @day=28
ELSE
SELECT @day=@intNoOfDays-31
END
IF(@intNoOfDays>59 AND @intNoOfDays<=90)
BEGIN
SELECT @month=3
IF(@intNoOfDays=90)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-59
END
IF(@intNoOfDays>90 AND @intNoOfDays<=120)
BEGIN
SELECT @month=4
IF(@intNoOfDays=120)
SELECT @day=30
ELSE
SELECT @day=@intNoOfDays-90
END
IF(@intNoOfDays>120 AND @intNoOfDays<=151)
BEGIN
SELECT @month=5
IF(@intNoOfDays=151)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-120
END
IF(@intNoOfDays>151 AND @intNoOfDays<=181)
BEGIN
SELECT @month=6
IF(@intNoOfDays=181)
SELECT @day=30
ELSE
SELECT @day=@intNoOfDays-151
END
IF(@intNoOfDays>181 AND @intNoOfDays<=212)
BEGIN
SELECT @month=7
IF(@intNoOfDays=212)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-181
END
IF(@intNoOfDays>212 AND @intNoOfDays<=243)
BEGIN
SELECT @month=8
IF(@intNoOfDays=243)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-212
END
IF(@intNoOfDays>243 AND @intNoOfDays<=273)
BEGIN
SELECT @month=9
IF(@intNoOfDays=273)
SELECT @day=30
ELSE
SELECT @day=@intNoOfDays-243
END
IF(@intNoOfDays>273 AND @intNoOfDays<=304)
BEGIN
SELECT @month=10
IF(@intNoOfDays=304)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-273
END
IF(@intNoOfDays>304 AND @intNoOfDays<=334)
BEGIN
SELECT @month=11
IF(@intNoOfDays=334)
SELECT @day=30
ELSE
SELECT @day=@intNoOfDays-304
END
IF(@intNoOfDays>334 AND @intNoOfDays<=365)
BEGIN
SELECT @month=12
IF(@intNoOfDays=365)
SELECT @day=31
ELSE
SELECT @day=@intNoOfDays-334
END
SELECT @sMonth=CONVERT(VARCHAR(10),@month)
SELECT @sDay=CONVERT(VARCHAR(10),@day)
IF(LEN(@day)=1)
SELECT @sDayc='0'+@sDay
ELSE
SELECT @sDayc=@sDay
IF(LEN(@month)=1)
SELECT @sMonthc='0'+@sMonth
ELSE
SELECT @sMonthc=@sMonth
SET @oDate=CONVERT(DATE,@year+'.'+@sMonthc+'.'+@sDayc,102)
END
RETURN @oDate
END
GO
Then you can get the converted date value by executing a simple query as given below
SELECT dbo.Convert_Julian(JulianDateField) FROM YOURTABLE
If you have any issues please put a comment
In this query I assumed that year contains 365 days
ReplyDelete