هوش تجاری (Business Intelligence)

هوش تجاری (Business Intelligence)

به اشتراک بگذاریم برای یادگیری، یاد بگیریم برای به اشتراک گذاری
هوش تجاری (Business Intelligence)

هوش تجاری (Business Intelligence)

به اشتراک بگذاریم برای یادگیری، یاد بگیریم برای به اشتراک گذاری

تبدیل تاریخ شمسی به میلادی،میلادی به شمسی ومیلادی به قمری در SQL

با کمی جستجو در اینترنت مشاهده خواهید کرد که توابع زیادی برای تبدیل تاریخ وجود دارد اما برخی از آن‌ها یا کامل نیستند و یا اشکالاتی دارند. در این پست توابع تبدیل تاریخ شمسی به میلادی، میلادی به شمسی  و میلادی به قمری را در کنار هم قرار داده‌‌ام. در نهایت نیز یک تابع جهت بدست آوردن سن افراد از تاریخ تولدشان معرفی شده است. این توابع برای تبدیل در بعضی تاریخ ها مشکلاتی داشتند که با یادآوری خوانندگان بلاگ رفع شد.


لازم به ذکر است که تابع تبدیل تاریخ میلادی به شمسی توسط آقای رضا راد نوشته شده است.


توابع تبدیل تاریخ میلادی به شمسی و شمسی به میلادی را از اینجا دریافت کنید. 

پس از دانلود و اجرای کوئری ها، از طریق دستورات زیر میتوانید تبدیل تارخ میلادی به شمسی و شمسی به میلادی را انجام دهید.


از کوئری‌ زیر برای مشاهده نتیجه استفاده کنید.

select dbo.GregorianToPersian('1980/01/01')

select dbo.ShamsitoMiladi('1358/10/11')

تبدیل تاریخ میلادی به قمری

 

از دستور زیر برای تبدلی تاریخ میلادی به قمری استفاده کنید.

 

SELECT CONVERT (nvarchar(30),GETDATE(),130) as Date

 

برای بدست آوردن سن از دستور زیر استفاده کنید.

 

SELECT DateDiff(yy , (select  dbo.ShamsitoMiladi ('1365/01/01') ), GetDate())

نظرات 13 + ارسال نظر
جواد سه‌شنبه 28 آذر 1391 ساعت 02:56 ب.ظ

با سلام
سوالی از خدمتتون داشتم
با توجه به اینکه استفاده از این توابع ممکن هست سربار زیادی در رکوردهای زیاد بوجود آورد. بهتر نیست یک فیلد اضافه در نظر گرفته شود و دو تاریخ شمسی و میلادی در رکورد ثبت شوند. فکر نمی کنم با توجه به سربار زیاد استفاده از توابع در رکوردهای زیاد استفاده از این روش نا مناسب باشد
با تشکر

سلام
صد درصد استفاده از یک فیلد اضافی برای تاریخ میلادی بهینه است اما از آنجایی که نمیتوانیم در ساختار جداول یک سازمان ماننده ساختار جدول پرسنلی تغیراتی ایجاد کنیم، گاهی مجبور به استفاده از این توابع هستیم.

shayan یکشنبه 22 دی 1392 ساعت 08:14 ب.ظ

Akhe adam code error dar mizare ro site!!!!
Khob nemizashti,Omadi masalan kasi copy nakone, baad bug andakhti
Khob nemikardi koln

دوست عزیز! کدها هیچ مشکلی ندارند و اگر با دقت کپی کنید حتما اجرا میشود.

مینا دوشنبه 14 بهمن 1392 ساعت 08:28 ب.ظ

با سلام - تبدیل شمسی به میلادی خطا داره، لطفا بررسی کنید و صحیح شو بذارید. روی SET @TMPRESULT=Cast(@MMonth as varchar(2))+'/'+CAST(@DDay Varchar(2))+'/'+CAST(@YYear as varchar(4)) - خطا میگیره. لطفا درستشو بذارید -ممنوووووننن

اسکریپت اصلاح شد!

نجفی شنبه 18 مرداد 1393 ساعت 02:29 ب.ظ

Procedure 'NumberOfDaysInMonthGregorian' not found
این پروسیجر رو هم بگذارید تا خطا نده

با سلام
Function مورد نظر اضافه شد.

مهرداد سه‌شنبه 9 دی 1393 ساعت 11:33 ق.ظ

SET @Date = '2014-12-22'
تابع میلادی به شمسی تو این تاریخ به جای 1 دی ماه
11- دی ماه میده
ده روز اختلاف داره
و این مشکل تا 30 ماه 12 میلادی ادامه داره

بله این مشکل وجود داره و به زودی رفع میشود.

سینا یکشنبه 23 فروردین 1394 ساعت 12:43 ق.ظ

سلام. من خیلی تازه کار هستم. میشه لطفا بفرمایید اگر ما در جدول دو ستون داشته باشیم که اولی شامل تاریخ میلادی بصورت yyyy/mm/dd باشد و دومی بایستی به معادل شمسی این تاریخ و با همین فرمت تبدیل شود؛ دقیقاً باید چه دستوری توی Update Table بنویسم.
ممنون از شما

سلام
برای اینکار باید از کرسر استفاده کنید. کرسر زیر را در sql کپی و بر اساس نام جدول خود ویرایش کنید.

declare @Date_Shamsi varchar(10)
declare @Date_miladi date

declare Map cursor
for select Date_Miladi FROM [StageArea].[dbo].[Table_1]

open Map
fetch Map into @Date_miladi
while (@@FETCH_STATUS = 0)
begin

set @Date_Shamsi=(select dbo.GregorianToPersian(@Date_miladi))

update [dbo].[Table_1]
set Date_Shamsi=@Date_Shamsi
where Date_Miladi=@Date_miladi

fetch Map into @Date_miladi
end
close Map
deallocate Map

سینا پنج‌شنبه 2 دی 1395 ساعت 04:08 ب.ظ http://irankhodros.com

واسه mysql کار نکرد .
<a href="http://irankhodros.com" >!</>

pari سه‌شنبه 17 اسفند 1395 ساعت 09:46 ق.ظ

سلام.
این function باگ داره. برای تاریخ '2017-12-21' مقدار 1396-09-30 رو برمیگردونه که درسته ولی برای روز بعدش '2017-12-22' مقدار 1396-10-12 رو برمیگردونه.
لطفا چک کنید.

مهدی مقیمی پنج‌شنبه 9 اسفند 1397 ساعت 12:10 ب.ظ http://translateyar.ir

با سلام
بنده از سایت هوش تجاری پژوهشیار به آدرس http://researchyar.ir مطالب شما رو هر از گاهی مطالعه می کنم و تبریک می گم بخاطر مطالب خوبتون.

سامان دوشنبه 2 دی 1398 ساعت 04:41 ب.ظ https://etmall.ir

با عرض سلام و خسته نباشی.
مقدار متغیر @StartDayGregorianDateInPersianCalendar بجای 12 و 11 باید 22 و 21 باشه وگرنه برای تاریخ های 22 ماه 12 میلادی تا 30 ماه 12 میلادی خطا دار میشه. البته بسته به اینکه سال کبیسه باشه یا نه میتونه برای تاریخ های 21 ماه 12 میلادی تا 30 ماه 12 میلادی خطادار باشه.
با تشکر.

سامان سه‌شنبه 3 دی 1398 ساعت 12:10 ق.ظ https://etmall.ir

سلام.
به اشتباه گفته بودم که برای درست شدن تاریخ از 22 ماه 12 تا آخرش باید مقدار @StartDayGregorianDateInPersianCalendar از 11 و 12 به 21 و 22 تغییر بدین.
احتیاج نیست به اونها دست بزنید و شرمنده از اینکه لدون دقت این رو گفتم.
تنها یه تغییر کوچیک لازمه بدین تا این قضیه درست بشه اونهم اینه که توی فانکشن GregorianToPersian
این خط رو
if(@m=@StartMonthGregorianDateInPersianCalendar)
به این خط تغییر بدین
if(@m=@StartMonthGregorianDateInPersianCalendar) and @Month=1
با تشکر و معذرت از اشتباه قبلی

بررسی میکنم
ممنون از دقت و توجه شما

ali پنج‌شنبه 30 بهمن 1399 ساعت 05:33 ب.ظ

مشکل داره کد : مثلا 2017/12/26 رو نشون میده 1396/10/16 !!!! در حالیکه 1396/10/5 باید باشه

اصلاح شد.
ممنون که اطلاع دادید

محمد جمعه 18 تیر 1400 ساعت 08:50 ب.ظ

سپاس

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد