در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

ذخیره تاریخ شمسی در SQL Server

سلام به دوستان Itpro ، تا حالا براتون پیش اومده که بخواهید تاریخ شمسی رو به همون شکلی که است در SQL server ذخیره کنید برای این کار شما نمی توانید نوع فیلد خودتون رو dateو یا datetime انتخاب کنید زیرا وقتی که تاریخ شمسی رو ذخیره کنید برنامه اررور میده و میگه که تاریخ خارج از رنج هستش و اجازه ذخیره سازی نمی ده. اکثرا برای این که داده ها رو به این شکل ذخیره کنند به جای استفاده از نوع تاریخ date از نوع رشته nvarchar استفاده می شود اما این راه حل مناسبی نیست زیرا نمی توان روی آن عملیاتی انجام داد. راه حل بهتر معرفی فیلد از نوع datetime2 است که دامنه بسیار وسیع تری نسبت به نوع datetime را پوشش می دهد و داده های شمسی را بدون مشکل ذخیره می کند و برروی آنها محاسبات انجام می دهد..

create table tblSample
(
xDate DateTime2 
)

go

insert into tblsample values ('1393/6/2')

در مثال بالا یک فیلد از نوع datetime2 داریم که به راحتی تاریخ شمسی رو ذخیره می کنه.

#انواع_داده_در_sql #انواع_داده_ها_در_sql_server #انواع_داده_در_sql_server2012 #ذخیره_تاریخ_شمسی #معرفی_انواع_داده_در_sql #ذخیره_تاریخ_شمسی_در_sql_سرور
10 نظر
فرهاد خانلری

عالی بود مرسی

پس با این حساب Convertor هایی که ساخته شده بلا استفاده میشه درسته؟

منظورم شمسی به میلادی و میلادی به شمسی هست

واضح تر میگم : اگر تو فرم برنامه نویسی وصل شده باشیم به بانک و بخواییم تاریخ رو به صورت شمسی وارد کنیم و بانک ذخیره کنه و بعداً از بانک بخونیم روی فرم برنامه سی شارپ همونجوری شمسی میاره یا نیاز پیدا میکنیم به متد های شمسی به میلادی و میلادی به شمسی؟

مهدی عادلی فر

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

فرهاد خانلری

حالا اگر بخواییم از یک TextBox بگیره تو سی شارپ چی؟ باید String رو تبدیل کنیم به چی؟

حسین احمدی

مهدی جان، یه مشکلی وجود داره برای تاریخ شمسی، امتحان کن، تاریخ 1393//06//31 رو نمیتونی ذخیره کنی. چون هنگام ذخیره سازی بر اساس میلادی Validate میشه و ماه ششم تو میلادی 31 روز رو قبول نمیکنه!

فرهاد خانلری

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

مرسی

مهدی عادلی فر

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

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

مهدی عادلی فر

با سلام به دوستان Itpro.ir بعد از ایرادی که برای نکته گفته شده از طرف دوستان مطرح شد خواستم که یکی از راه های تبدیل تاریخ میلادی به تاریخ شمسی و ذخیره سازی آن به صورت میلادی در پایگاه داده رو با زبان #C بگم که بعد از خواندن از دیتابیس اونو تبدیل به تاریخ شمسی می کنه و نشون میده.

برای حل این مشکل باید مانند این نکته عمل کرد.

استفاده از تاریخ شمسی در دات نت

viator

سلام به همگی

دوستان به ظاهر شاید این روش درست باشد

اما باز هم در ثبت تاریخ شمسی در دیتابیس به مشکل خواهید خورد

مثلا تست کنید ببینید می توانید تاریخ 13930631 را در دیتابیس ذخیره کنید؟

مسلما نمی شود چون ماهیت تاریخ همچنان میلادی است و ماه 6 میلادی یعنی ماه Jun میلادی 31 روزه نیست و این تاریخ هرگز ثبت نخواهد شد.

محمد طارمی

سلام به شما عزیزان

البته چند تا راه حل بهینه وجود داره که دوستان برای استفاده از این 3 روش استفاده کنند:

1-ذخیره ی تاریخ میلادی در یک فیلد و ذخیره تاریخ شمسی در ستون دیگر(موقع درج در سیستم)

نحوه کار هم به اینصورت است که شما از طریق Application به توسط میلادی سرچ می کنید و به کاربر تاریخ شمسی رو نشان میدهید.

2- استفاده از CLR و اضافه کردن اون به عنوان یک دیتاتایپ جدید. که در اینصورت میتونید کلیه ی توابعی رو که برای تاریخ میلادی استفاده میکردید رو برای این دیتاتایپ جدید هم استفاده کنید.

نکته(فقط در خصوص استفاده از این روش سعی کنید در وبسایت هاتون اینکار رو انجام ندید چون ادمین هاستینگ به این راحتیا اجازه ی اضافه شدن CLR به دیتابیس رو نمیده)

3-استفاده از جدول Dim date ، که این تکنینک زمانی کاربرد داره که شما میزان حجم داده هاتون بالای 30 تا 40 میلیون رکورد باشه.

این تکنینک در حوزه DW بسیار پرکاربرده.

نکته 2( زمانی که این جدول رو ایجاد می کنید و فیلد تاریخ میلادی رو به عنوان Clustered قرار میدید گزینه ی Date Correlation Optimizetion رو به ازای دیتابیستون True کنید)

ZimaSystem

سلام عالی بود

در EF برای تعریف خصیصه تاریخ به صورت تایم استمپ شمسی راهی هستش ؟

        [Column(TypeName = "datetime2")]
        [Timestamp]
        public DateTime CreateDateTime { get; set; }

این که همان تاریخ سیستم را رجیستر میکند راهی برای ذخیره تاریخ شمسی وجود دارد ؟

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....