alter function dbo.ToGregorianDate(@p as int =0) returns date as begin declare @res as date; declare @PersianDate nvarchar(7) = RIGHT (@p, 7) DECLARE @Year INT = SUBSTRING(@PersianDate, 1, 3) DECLARE @Month INT = SUBSTRING(@PersianDate, 4, 2) DECLARE @Day INT = SUBSTRING(@PersianDate, 6, 2) DECLARE @DiffYear INT = @Year - 350 DECLARE @Days INT = @DiffYear * 365.24 + CASE WHEN @Month < 7 THEN (@Month - 1) * 31 ELSE 186 + (@Month - 7) * 30 END + @Day DECLARE @StartDate DATETIME = '03/21/1971' set @res = @StartDate + @Days return CONVERT(DATE, @res); end