نمایش نتایج 1 تا 3 از 3

نام تاپیک: یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    مشهد مقدس
    پست
    50

    یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)

    با عرض سلام
    ببخشید من در 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

  2. #2
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)

    سلام
    برنامه اصلا از نقطه 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)

  3. #3
    کاربر تازه وارد آواتار reza-abi
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    Always in front of computer
    سن
    34
    پست
    35

    نقل قول: یکی بگه مشکل تابع من کجاست ؟؟(تابع تبدیل تاریخ میلادی به شمسی)

    با عرض سلام
    ببخشید من در 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]

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •