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

نام تاپیک: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

  1. #1
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    سلام.از دوستان کسی UDF يا SP به زبان T-SQL (دقت کنيد، دقيقاً T-SQL نه SQLCLR) براي تبديل تاريخ ميلادي به هجري شمسي سراغ دارد؟
    من در تالار فعلي (SQL Server) هم با کلمه کليدي "هجري شمسي" جستجو کردم اما چيزي پيدا نکردم.

  2. #2

    نقل قول: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    سلام
    به لينك زير رجوع كنيد
    https://barnamenevis.org/showthread.php?t=220772

  3. #3

    نقل قول: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    CREATE FUNCTION [dbo].[MiladiTOShamsi] (@MDate  DateTime)  
    RETURNS Varchar(10)
    AS
    BEGIN
    DECLARE @SYear as Integer
    DECLARE @SMonth as Integer
    DECLARE @SDay as Integer
    DECLARE @AllDays as float
    DECLARE @ShiftDays as float
    DECLARE @OneYear as float
    DECLARE @LeftDays as float
    DECLARE @YearDay as Integer
    DECLARE @Farsi_Date as Varchar(100)
    SET @MDate=@MDate-CONVERT(char,@MDate,114)

    SET @ShiftDays=466699 +2
    SET @OneYear= 365.24199


    SET @SYear = 0
    SET @SMonth = 0
    SET @SDay = 0
    SET @AllDays = CAst(@Mdate as Real)

    SET @AllDays = @AllDays + @ShiftDays

    SET @SYear = (@AllDays / @OneYear) --trunc
    SET @LeftDays = @AllDays - @SYear * @OneYear

    if (@LeftDays < 0.5)
    begin
    SET @SYear=@SYear+1
    SET @LeftDays = @AllDays - @SYear * @OneYear
    end;

    SET @YearDay = @LeftDays --trunc
    if (@LeftDays - @YearDay) >= 0.5
    SET @YearDay=@YearDay+1

    if ((@YearDay / 31) > 6 )
    begin
    SET @SMonth = 6
    SET @YearDay=@YearDay-(6 * 31)
    SET @SMonth= @SMonth+( @YearDay / 30)
    if (@YearDay % 30) <> 0
    SET @SMonth=@SMonth+1
    SET @YearDay=@YearDay-((@SMonth - 7) * 30)
    end
    else
    begin
    SET @SMonth = @YearDay / 31
    if (@YearDay % 31) <> 0
    SET @SMonth=@SMonth+1
    SET @YearDay=@YearDay-((@SMonth - 1) * 31)
    end
    SET @SDay = @YearDay
    SET @SYear=@SYear+1

    SET @Farsi_Date = CAST (@SYear as VarChar(10)) + '/' + CAST (@SMonth as VarChar(10)) + '/' + CAST (@SDay as VarChar(10))
    Return @Farsi_Date




    چند سال پیش ، یکی از دوستان در همین تالار گذاشته بودن.
    آخرین ویرایش به وسیله meysam_pro : پنج شنبه 28 مرداد 1389 در 05:26 صبح

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    مرسي. الگوريتم را استفاده کردم. اما در محاسبه سال کبيسه باگ داره. به عنوان نمونه روز 20 مارس را براي سال هاي 2009 و 2010 چک کنيد.

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1386
    پست
    55

    نقل قول: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    با سلام دوست عزیز
    اینجا فکر میکنم جوابتو پیدا کنی
    http://www.barnamenevis.org/sh...d.php?t=232305


    با آرزوی موفقیت
    Voodoo01

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: تبديل تاريخ ميلادي به هجري شمسي به T-SQL

    متاسفانه اين الگوريتم هم ايراد داره، به طوري که از سال 1993 به ماقبل تمامي تاريخ ها رو با 1 روز کم و زياد بر مي گردونه. براي بررسي صحت اين مطلب مي تونيد از صفحه تبديل تاريخ موجود در آدرس http://calendar.ut.ac.ir/Fa/Software/CalConv.asp که وابسته به موسسه ژئوفيزيک دانشگاه تهرانه و تقويم کشور رو هر سال تدوين مي کنه استفاده کنيد.

    باز هم ممنونم.

    من از دو روز پيش خودم اقدام به نوشتن اين الگوريتم کردم. در واقع يک بار برنامه اي رو به زبان VB 6.0 که تبديل تاريخ رو با دقت زياد و به درستي انجام مي داد از اينترنت در سايت فردي به نام مهدي وجودي پيدا کرده بودم. بعد از اين جريان رفتم سراغ سورس اون برنامه و تمامي کُدها رو از VB 6.0 به T-SQL تبديل کردم. اسکريپت نهايي رو هم به زودي در سايت مي ذارم.

    با آرزوي موفقيت.

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

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