Create FUNCTION [dbo].[dp_ToHijri] (@EDate datetime)
RETURNS nvarchar(50) AS
BEGIN
if @EDate is null return ''
Declare @EYear int, @EMon smallint, @EDay smallint, @ELeap bit, @EMonArray Char(12), @EDayOfYear int
Declare @FYear int, @FMon smallint, @FDay smallint, @FLeap bit, @FMonArray Char(12)
Select @FMonArray= Char(31)+Char(31)+Char(31)+Char(31)+Char(31)+Char( 31)+Char(30)+Char(30)+Char(30)+Char(30)+Char(30)+C har(29)
Select @EMonArray= Char(31)+Char(28)+Char(31)+Char(30)+Char(31)+Char( 30)+Char(31)+Char(31)+Char(30)+Char(31)+Char(30)+C har(31)
Select @EYear= Year(@EDate)
Select @EMon= Month(@EDate)
Select @EDay= Day(@EDate)
if (@EYear %4)=0 Select @ELeap=1 else Select @ELeap=0
--------------------- Calc Day Of Year
Declare @Temp int, @Cnt int
Select @Cnt=@EMon-1
Select @Temp=0
While @Cnt<>0 begin
if (@Cnt=2)and(@ELeap=1) Select @Temp= @Temp+29
else Select @Temp= @Temp + Ascii(Substring(@EMonArray, @Cnt, 1))
Select @Cnt=@Cnt-1
end
Select @EDayOfYear= @Temp+@EDay
---------------------- Convert to Farsi
Select @Temp= @EDayOfYear-79
if @Temp>0 Select @FYear= @EYear-621
else begin
Select @FYear= @EYear-622
if ((@FYear %4)=3) Select @Temp= @Temp+366 else Select @Temp= @Temp+365
end
if (@FYear %4)=3 Select @FLeap=1 else Select @Fleap=0
Select @Cnt= 1
While (@Temp<>0) and (@Temp>Ascii(Substring(@FMonArray, @Cnt, 1))) begin
if @Cnt=12
if (@FLeap=1) Select @Temp=@Temp-30 else Select @Temp= @Temp-29
else Select @Temp= @Temp-Ascii(Substring(@FMonArray, @Cnt, 1))
Select @Cnt= @Cnt+1
end
if @Temp<>0 begin
Select @FMon= @Cnt
Select @FDay= @Temp
end else begin
Select @FMon= 12
Select @FDay=30
end
------------------ Create Output
Declare @YStr Char(4), @MStr char(2), @DStr Char(2)
select @YStr= Convert(Char, @FYear)
if @FMon<10 Select @MStr='0'+Convert(Char,@FMon) else Select @MStr=Convert(Char, @FMon)
if @FDay<10 Select @DStr='0'+Convert(Char,@FDay) else Select @DStr=Convert(Char, @FDay)
return @YStr+'/'+@MStr+'/'+@dStr
END