سلام.از دوستان کسی UDF يا SP به زبان T-SQL (دقت کنيد، دقيقاً T-SQL نه SQLCLR) براي تبديل تاريخ ميلادي به هجري شمسي سراغ دارد؟
من در تالار فعلي (SQL Server) هم با کلمه کليدي "هجري شمسي" جستجو کردم اما چيزي پيدا نکردم.
سلام.از دوستان کسی UDF يا SP به زبان T-SQL (دقت کنيد، دقيقاً T-SQL نه SQLCLR) براي تبديل تاريخ ميلادي به هجري شمسي سراغ دارد؟
من در تالار فعلي (SQL Server) هم با کلمه کليدي "هجري شمسي" جستجو کردم اما چيزي پيدا نکردم.
سلام
به لينك زير رجوع كنيد
https://barnamenevis.org/showthread.php?t=220772
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 صبح
مرسي. الگوريتم را استفاده کردم. اما در محاسبه سال کبيسه باگ داره. به عنوان نمونه روز 20 مارس را براي سال هاي 2009 و 2010 چک کنيد.
با سلام دوست عزیز
اینجا فکر میکنم جوابتو پیدا کنی
http://www.barnamenevis.org/sh...d.php?t=232305
با آرزوی موفقیت
Voodoo01
متاسفانه اين الگوريتم هم ايراد داره، به طوري که از سال 1993 به ماقبل تمامي تاريخ ها رو با 1 روز کم و زياد بر مي گردونه. براي بررسي صحت اين مطلب مي تونيد از صفحه تبديل تاريخ موجود در آدرس http://calendar.ut.ac.ir/Fa/Software/CalConv.asp که وابسته به موسسه ژئوفيزيک دانشگاه تهرانه و تقويم کشور رو هر سال تدوين مي کنه استفاده کنيد.
باز هم ممنونم.
من از دو روز پيش خودم اقدام به نوشتن اين الگوريتم کردم. در واقع يک بار برنامه اي رو به زبان VB 6.0 که تبديل تاريخ رو با دقت زياد و به درستي انجام مي داد از اينترنت در سايت فردي به نام مهدي وجودي پيدا کرده بودم. بعد از اين جريان رفتم سراغ سورس اون برنامه و تمامي کُدها رو از VB 6.0 به T-SQL تبديل کردم. اسکريپت نهايي رو هم به زودي در سايت مي ذارم.
با آرزوي موفقيت.