یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)
با عرض سلام
ببخشید من در 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
نقل قول: یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)
سلام
برنامه اصلا از نقطه Select 1 عبور نمی کند برای همین همه مقادیر null هستند:
declare @dt smalldatetime
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 @dt=getdate()
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
Select 0
set @Years = @Years + 1
set @Days = @Days - @Year_Length end
Else begin
Select 1
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
Select str(@Sal) , str(@Mah) , str(@Day1)
نقل قول: یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)
با عرض سلام
ببخشید من در 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
[/quote]