ghrzarei
پنج شنبه 22 اسفند 1387, 19:49 عصر
با عرض سلام
ببخشید من در sqlserver2005 تازه کار هستم و این اولین تابعی می باشه که نوشتم.
تابع معادل آن در vb6 و یا C# جواب می دهد ولی در sqlserver2005 مقدار null را بر می گرداند علت چیست ؟؟
ضمنا توابع دیگری روی سایت پیدا کردم ولی سالهای کبیسه را پشتیبانی نمی کند.
CREATE FUNCTION [dbo].[MiladiToShamsi2](@dt smalldatetime)
RETURNS Nchar(10) AS
begin
Declare @Days int
Declare @Year_Length int
Declare @Sal int
Declare @Mah int
Declare @Day1 int
Declare @Years int
Declare @Tem int
Declare @Tem2 int
set @Days = datediff(day,1953/03/21,@dt)
set @Years = 0
set @Year_Length = 0
--
While @Days >= 0
begin
set @Tem = (1342 + @Years)-1309
If ((((@Tem % 32) - floor(@Tem / 32)) % 4) = 0 ) set @Year_Length = 366
If ((((@Tem % 32) - floor(@Tem / 32)) % 4) <> 0 ) set @Year_Length = 365
If (@Days - @Year_Length >= 0)
begin
set @Years = @Years + 1
set @Days = @Days - @Year_Length
end
Else
begin
set @Sal = 1342 + @Years
If (@Days <= 185)
begin
set @Mah = 1 + floor(@Days / 31)
set @Day1 = 1 + (@Days % 31)
end
Else
begin
set @Days = @Days - 186
set @Mah = 7 + floor(@Days / 30)
set @Day1 = 1 + (@Days % 30)
end
end
break
end
Return str(@Sal) + '/' + str(@Mah) + '/' + str(@Day1)
end
ببخشید من در sqlserver2005 تازه کار هستم و این اولین تابعی می باشه که نوشتم.
تابع معادل آن در vb6 و یا C# جواب می دهد ولی در sqlserver2005 مقدار null را بر می گرداند علت چیست ؟؟
ضمنا توابع دیگری روی سایت پیدا کردم ولی سالهای کبیسه را پشتیبانی نمی کند.
CREATE FUNCTION [dbo].[MiladiToShamsi2](@dt smalldatetime)
RETURNS Nchar(10) AS
begin
Declare @Days int
Declare @Year_Length int
Declare @Sal int
Declare @Mah int
Declare @Day1 int
Declare @Years int
Declare @Tem int
Declare @Tem2 int
set @Days = datediff(day,1953/03/21,@dt)
set @Years = 0
set @Year_Length = 0
--
While @Days >= 0
begin
set @Tem = (1342 + @Years)-1309
If ((((@Tem % 32) - floor(@Tem / 32)) % 4) = 0 ) set @Year_Length = 366
If ((((@Tem % 32) - floor(@Tem / 32)) % 4) <> 0 ) set @Year_Length = 365
If (@Days - @Year_Length >= 0)
begin
set @Years = @Years + 1
set @Days = @Days - @Year_Length
end
Else
begin
set @Sal = 1342 + @Years
If (@Days <= 185)
begin
set @Mah = 1 + floor(@Days / 31)
set @Day1 = 1 + (@Days % 31)
end
Else
begin
set @Days = @Days - 186
set @Mah = 7 + floor(@Days / 30)
set @Day1 = 1 + (@Days % 30)
end
end
break
end
Return str(@Sal) + '/' + str(@Mah) + '/' + str(@Day1)
end