ورود

View Full Version : تعریف فیلد تاریخ و زمان در SQL



mahdy.asia
دوشنبه 02 مرداد 1391, 16:52 عصر
ما یک تیم برنامه نویسی در یک شرکت تولیدی هستیم عقیده اعضاء این تیم اینه که بهتره برای تاریخ و زمان فیلد از نوع کاراکتر 8 تایی برای تاریخ و از توع کارکتر 5 تایی برای زمان تعریف کنیم دلیل این موضوع تحلیل راحت اطلاعات هنگام کار برنامه نویس و ... می باشد.
اگر کسی نظر دیگری داره مطرح کنه و مزایای روش رو هم بگه

Nima_kyan
دوشنبه 02 مرداد 1391, 17:40 عصر
به نظر من هم فيلد ها رو از نوع كاراكتري در نظر بگيريد بهتره. چون گزارشگيري رو راحت تر ميكنه. ولي چرا فيلد تاريخ 8 كاراكتري؟؟؟ شما اگه بخوايد از يك فرمت استاندارد استفاده كنيد بهتره 10 كاراكتري درنظرش بگيريد يعني به اين شكل yyyy/mm/dd
و همچنين موقع ذخيره كردن مقاديرتون بسيار دقت كنيد كه تاريخ ها يا همه با اعداد فارسي ذخيره شن و يا همه لاتين باشن(ترجيحا لاتين).چون موقع گزارشگيري بين كاراكتر فارسي و لاتين تفاوت وجود داره.

حمیدرضاصادقیان
دوشنبه 02 مرداد 1391, 23:22 عصر
سلام.
چرا به صورت dateTime نگهداری نمیکنید؟ اینجوری خیل عظیمی از توابع خود SQL Server به شما کمک خواهند کرد.تنها کار اضافه ای که شما باید بکنید اینه که هنگام نمایش تبدیل به تاریخ فارسی کنید.
ولی برای ثبت و جستجو و خیلی از پارامترهای دیگه امکانات بهتری به شما خواهد داد.

mahdy.asia
چهارشنبه 04 مرداد 1391, 00:02 صبح
چرا به صورت dateTime نگهداری نمیکنید؟
خیلی از مواقع گزارشات را بوسیله دستورات اسکیوال می گیریم و یا برای رفع خطا مجبوریم جداول را بصورت چشمی بررسی نماییم در این مواقع درک بهتری از فیلدهای مورد نظر بوجود می آید از نظر توابع هم یکی دو تا تابع نیاز داریم که خودمان می نویسیم تا بحال به مشکلی بر نخوردیم که ما را قانع نماید فیلدها را از نوع datetime بگیریم مگر اینکه توضیحات و تحلیل شما از موضوع ما را به صرافت این مسئله بندازد.

بهتره 10 كاراكتري درنظرش بگيريد به نظر می آید که ده کارکتر اطلاعت کاملتری را بوجود می آورد اما واقعا به این اطلاعات نیاز خواهیم داشت

حمیدرضاصادقیان
چهارشنبه 04 مرداد 1391, 11:17 صبح
معایب استفاده از کارکتر.
1- Sort نامرتب.
2- مشکل در اضافه و کم کردن به تاریخ و زمان
3- کندی در جستجو
4- ذخیره به میزان طول رکورد در هارد که باعث کاهش چگالی داده های ذخیره شده روی یک Page شده و باعث افزایش تعداد Page ها همچنین افزایشI/O و درنهایت کاهش سرعت در تعداد رکوردهای بالا.

مزایای استفاده از فیلد DateTime
1- Sort مرتب
2- ذخیره سازی به صورت عددی که باعث افزایش سرعت دستورات شما خواهد شد.
3- به راحتی میتوان فرمت تاریخ را با توجه به فرمت زمان سیستم تغییر داد بدون کدنویسی
4- امکان اضافه و کم کردن به تاریخ و زمان
5- امکان استفاده از توابع SQL Server برای بدست آوردن بخشی از تاریخ.
6- اگر ازنوع DateTime استفاده کنید 8 بایت فضا اشغال کرده و اگر ازنوع SmallDateTime استفاده کنید 4 بایت فضا اشغال میکند.

mahdy.asia
جمعه 06 مرداد 1391, 05:26 صبح
معایب استفاده از کارکتر.
1- Sort نامرتب.
2- مشکل در اضافه و کم کردن به تاریخ و زمان
3- کندی در جستجو
4- ذخیره به میزان طول رکورد در هارد که باعث کاهش چگالی داده های ذخیره شده روی یک Page شده و باعث افزایش تعداد Page ها همچنین افزایشI/O و درنهایت کاهش سرعت در تعداد رکوردهای بالا.

مورد یک Sort بدون هیچ مشکلی مرتب می شود
مورد دو توابع پر استفاده (مدت بین دو تاریخ، رفتن روزهای قبل یا بعد) نوشته شده است و اگر قسمتی از تاریخ را نیاز داشته باشیم از تابع SubString استفاده میکنیم در 50 سیستم تولید شده تقریبا مورد دیگری نیاز نبوده است
مورد سه اگر جستجو در String کندتر است حرف شما صحیح می باشد
مورد چهار جرف شما صحیح می باشد
اما مزایای روش
زمان یا تاریخ در جداول برای برنامه نویس قابل فهم تر می باشد.
هزینه تبدیل تاریخ میلادی به شمسی وجود ندارد

baktash.n81@gmail.com
شنبه 07 مرداد 1391, 13:40 عصر
البته راحتی برنامه نویس جزو مزایای یک سیستم یا یک روش محسوب نمی شه ...

در خصوص تاریخ ... یه سئوال اگه Datetime لازم نبود چرا مایکروسافت انقدر ضحمت کشید و ایجادش کرد ... ؟!؟

شاید در خصوص سیستم هایی که اساس کارشون با تاریخ نیست ... مثلا فقط تاریخ تولد رو می خواین نگهداری کنید روش شما ... مشکلی ایجاد نکنه و خیلی هم بهتر باشه ... اما درخصوص سیستم هایی که پردازشهای تاریخی زیادی خواهند داشت روش شما مشکل ایجاد می کنه ... و البته روش شما هم تغریبا هیججا به بنبست نمی رسه و می تونید روش پا فشاری کنید ... اما همین نکات هستند که مشخص می کنند یه سیستم خوب طراحی شده یا نه ...



البته تبدیل تاریخ به شمسی سربار آنچنانی ایجاد نمی کنه ...

mahdy.asia
شنبه 07 مرداد 1391, 20:50 عصر
در خصوص تاریخ ... یه سئوال اگه Datetime لازم نبود چرا مایکروسافت انقدر ضحمت کشید و ایجادش کرد ... ؟!؟
مایکرو سافت این فیلد را برای تاریخ های میلادی ایجاد کرده است اما چون ما تاریخ شمسی استفاده می کنیم یه جورایی می تونیم یک Type توی اسکیوال تعریف کنیم متناسب با تاریخ شمسی و توابع اونم بنویسیم و بعد هم از این Type برای تاریخ استفاده کنیم.
راستش رو بخوای من نمی خوام روی روش خودم پافشاری کنم بلکه می خوام ببینم اگر روش من خوب نیست روی روش های جدید سوئیچ کنم

حامد مصافی
شنبه 07 مرداد 1391, 22:17 عصر
من هم همیشه از همین روش استفاده می‌کنم با این تفاوت که به جای کاراکتر از نوع عددی را به کار می‌گیرم.
علت این کار هم اینه که به سورس‌هایی که برای تبدیل تاریخ شمسی به میلادی نوشته شدند زیاد نمیشه اعتماد کرد.
فقط یه نکته. همکاران شما چرا از کاراکتر استفاده می‌کنند و نه عدد؟

mahdy.asia
یک شنبه 08 مرداد 1391, 14:32 عصر
علت این کار هم اینه که به سورس‌هایی که برای تبدیل تاریخ شمسی به میلادی نوشته شدند زیاد نمیشه اعتماد کرد.
توابع تبدیل رو خودمون نوشتیم.

فقط یه نکته. همکاران شما چرا از کاراکتر استفاده می‌کنند و نه عدد؟
مزایای این روش به اینه که بصورت مستقیم و بدون هیچ تابعی مقدار تاریخ در اختیار برنامه نویس و کاربر قرار می گیرد اما من مایلم در مورد روش تون بیشتر توضیح بدید یعنی مثلا تاریخ 91/05/08 رو با چه مقداری در فیلد عددی ذخیره می کنید

حامد مصافی
یک شنبه 08 مرداد 1391, 14:43 عصر
به صورت 13910508 ذخیره می‌کنیم. به این ترتیب هم مشکل نمایش و هم مقایسه بر طرف می‌شود.

baktash.n81@gmail.com
یک شنبه 08 مرداد 1391, 16:20 عصر
اگه بخوام تاریخ رو صد روز ببرم جلوتر چی کار می کنید ؟!

mahdy.asia
دوشنبه 09 مرداد 1391, 21:40 عصر
اگه بخوام تاریخ رو صد روز ببرم جلوتر چی کار می کنید ؟! یک جدول داریم که مشخصات هر روز (تاریخ میلادی،تاریخ شمسی،روز هفته، ...) تا 100 سال رو نگهداری می کنیم یک تابع هم نوشتیم که یک تاریخ می گیره و یک عدد که تاریخ رو به اندازه عدد جلو یا عقب می بره

به صورت 13910508 ذخیره می‌کنیم. به این ترتیب هم مشکل نمایش و هم مقایسه بر طرف می‌شود. مشکل شما اینه که برای نمایش اطلاعات به کاربر می بایست از تابع استفاده نمایید اما ما مستقیم محتوای هر فیلد تاریخ رو به کاربر نمایش می دهیم در ضمن ما نه مشل نمایش داریم نه مشکل مقایسه شما بدون هیچ تابعی مستقیم محتوای فیلد رو می تواینید با محتوا از همین نوع مقایسه نمایید و با مقایسه شما هیچ تفاوتی ندارد

FastCode
جمعه 13 مرداد 1391, 10:32 صبح
من کاراکتر با / ذخیره میکنم.
کد تبدیل تاریخم نزدیک ۱۰۰۰ خط C# ه ولی سرعتش خیلی خوبه.
برای محاسبات به شماره روز تبدیل میکنم.هیچ جا از تاریخ میلادی استفاده نمیکنم.

svhasvha
شنبه 13 مهر 1392, 14:06 عصر
سلام
خیلی از تاریخ این پست گذشته ولی من الان خوندم
یه نکته
چرا از datetime2 استفاده نمیکنید؟
از سال 1/1/1
تا به امروز رو پشتیبانی میکنه
!!!!!
مشکل فقط 5 رو ز از ساله یعنی روز های که ما 31 روزه هستیم ومیلادی ها 30 روزه یعنی برج 2
4
6
و
ماه آخر اونها که 28 روزه
واسه این 5 روزم با یه دستور ایف و یه فلید یک کاراکتری همه چیز حل میشه
مثلا اگه 31 شهریور بود منهای یک روز کن وتو فیلد یک کاراکتری یه مشخصه بخصوص بزار (هرچیزی که بفهمیم یک روز ار روز واقعی کمتر ذخیره شده است)
موقعه واکشی هم میتونید رو همون فیلد مانور بدید

araz_pashazadeh
چهارشنبه 16 مهر 1393, 10:44 صبح
دوستان لگفا بگین خطای این پرس و جو چیه؟

SELECT RequestID, ClientName, ClientLastName, ClientAge, ClientLevelOfEducation, ClientMobileNumber, ClientDate, RequestOrder, IsDeleted, OrgIDFROM Visit_Request
WHERE ((ClientDate) BETWEEN '2007/02/30' AND '2014/02/30')

مشکل کجاست که خطای زیر را میده
Conversion failed when converting date and/or time from character string.

با تشکر