PDA

View Full Version : تاریخ در sql



ghazal20
دوشنبه 14 دی 1383, 18:34 عصر
برای اینکه در دیتابیس بتوانیم تاریخ فارسی وارد کنیم نوع آن را باید از چه نوعی انتخاب کنیم ؟ ( من از sql server2000 استفاده می کنم ) . :گیج:

vadood
دوشنبه 14 دی 1383, 19:33 عصر
برای اینکه تاریخ شمسی را ذخیره کنید (کاری که من توصیه نمی کنم) char(8) لازم داری که مثلا این جوری ذخیره کنی:
13831015
یا
13830904
شاید هم 1300 اش برای کاربرد خاص شما لازم نباشه

linux
دوشنبه 14 دی 1383, 21:01 عصر
:)
تاریخ را بصورت میلادی ذخیره کن موقع بازیابی به شمسی تبدیل کن

ghazal20
سه شنبه 15 دی 1383, 01:34 صبح
من باsql و دلفی کار می کنم و اطلاعاتم را در DBGrid بازیابی می کنم . حالا در این مورد نمی دونم چطوری باید موقع بازیابی به شمسی تبدیل کنم؟ :گیج:

hmm
سه شنبه 15 دی 1383, 08:09 صبح
با استفاده از SP ها

linux
سه شنبه 15 دی 1383, 20:50 عصر
ودود قبلا یک کاری کرده بود ازش کمک بگیر

mnajafi
چهارشنبه 16 دی 1383, 11:05 صبح
روشی که ودود گفته رو من زیاد کار کردم یعنی تاریخ رو به صورت (char(8 گرفتم وبا استفاده از substr روز وماه رو بدست اوردم یا اونو به صورت int گرفتم وبا استفاده از تقسیم روز وماه رو بدست آوردم ولی این کارها رو توی محیط های تحت dos انجام دادم.اگه روش سریعتر ومناسبتری است لطفا بگین.

AminSobati
چهارشنبه 16 دی 1383, 12:04 عصر
دوست عزیزم،
شما میتونین تاریخها رو به فرمت میلادی همیشه ذخیره کنین و موقع بازیافت از دیتابیس، توسط تابعی که در SQL Server از قبل نوشتین، اون رو به شمسی تبدیل کنین. مثلا:

SELECT dbo.fn_ToShamsi(OrderDate) FROM MyTable
حسن مهم ذخیره به فرمت میلادی اینه که میتونین روی تاریخ، عمل جمع یا تفریق یا هر کار دیگه ای انجام بدین و فقط موقع نمایش، با استفاده از اون تابع، به شمسی تبدیل کنین.
گاهی اوقات تاریخ رو کاربر باید وارد کنه. اگر تاریخی که قرار وارد بشه، تاریخ همون روز باشه، بهتره تاریخ میلادی رو خودتون در دیتابیس ثبت کنین و از کاربر نگیرین. ولی ممکنه لازم باشه کاربر، تاریخی غیر از تاریخ روز رو وارد کنه. در این حالت، ناچارا باید اون رو در غالب دیگه ای غیر از DateTime ذخیره کنین (که در پستهای قبلی اشاره شده).
موفق باشید

sharpboy
دوشنبه 21 دی 1383, 16:23 عصر
استاد عزیز

همچین SP رو دارید که تاریخ میلادی رو به شمسی تبدیل کنه
:embr:
من یکی دارم Encrypt شده روشی هست که از این حالات در بیارم ؟
از زحماتتون بسیار ممنونم

AminSobati
دوشنبه 21 دی 1383, 20:41 عصر
دوست عزیزم،
من Source اون در VB رو دارم که میتونم اینجا Post کنم تا خودتون آستینها رو بالا برنین و به Function تبدیلش کنین!
تابعی که Encrypt شده باشه فقط توسط اسکریپت اون قابل برگشته.
موفق باشین

Navid7h
چهارشنبه 09 شهریور 1384, 23:18 عصر
با سلام
1 به نظر شما استفاده از یک تابع در برنامه اصلی برای تبدیل تاریخ به فرمت هجری شمسی مناسب تره یا استفاده از یک Funtion یا Store Procedure در DB ??

2 ایا در Sql Server 2005 فیلد های از نوع Date Time قابلیت ذخیره تاریخ هجری شمسی را دارند؟ بدون استفاده از هیچ تابع و ... برای تبدیل :افسرده:

AminSobati
چهارشنبه 09 شهریور 1384, 23:47 عصر
1) نوید جان گاها هر دو مورد نیاز قرار میگیره. ولی بسیاری از برنامه نویسها اگر قصد داشته باشند که الزاما فقط در یک سمت این کار رو به عهده بگیرند، کلاینت رو انتخاب میکنند. شاید هم دلیلش فقط این باشه که از قدیم الایام توابع موجود در VB و دلفی موجود بوده و Historically به این کار عادت کرده باشند!

2) ظاهر SQL2K5 هم مثل SQL2K با تاریخ رفتار میکنه اما در عوض شما به دلیل در اختیار داشتن DOT NET Framework در SQL2K5 میتونین تبدیل رو بسیار راحت در سمت سرور انجام بدین و در فیلد کاراکتری یا عددی ذخیره کنین.

M.kavyani
یک شنبه 27 آذر 1384, 16:24 عصر
با سلام خدمت استاد عزیز جناب آقای ثباتی
شما در یکی از تاپیک ها بیان کرده بودید که یه روش برای استفاده از تاریخ شمسی و عملیات روی ان اینه که تاریخ شمسی و میلادی رو کنار هم نگه داریم . این خیلی ایده جالب و قشنگیه. خیلی کار رو اسون و راحت میکنه. اما یه سوال؟ : اینکار باعث بالاتر رفتن ظرفیت دیتابیس و کاهش سرعت و کار آرایی اون نمیشه. یا به عبارتی چه زمانی بهتر است از این شیوه استفاده کنیم و چه زمانی از Function ها؟
در پناه حق موفق و کامروا باشید.

oghab
یک شنبه 27 آذر 1384, 16:48 عصر
سلام
راستش منم سر این موضوع خودمو کشتم و کلی سوال کردم و راه های مختلف پیشنهاد شد، از اول خیلیها بهم گفتن کارکتری ذخیره کن، روی جستجوشم مشکلی پیدا نمی کنی. ولی باز به هزار کار متوسل شدم. که از نوع تاریخ ذخیره کنم، و کلی راجع به روشهای مختلف برای حل این موضوع تو این سایت پرسیدم و پرسیدم. ولی تهایتا به این نتیجه رسید که با نوع کاراکتری تاریخم را ذخیره کنم. مثلا 02/09/1384

AminSobati
یک شنبه 27 آذر 1384, 20:47 عصر
ذخیره تاریخ میلادی و شمسی در دیتابیس، فضای ناچیزی رو اشغال میکنه و در مقابل منفعتی که شما از این کار میبرید، به هیچ عنوان قابل توجه نیست. اگر تا این حد مصرف شدن فضای دیسک مهم باشه، پس هیچ وقت نباید در دیتابیس Index بسازید!

M.kavyani
دوشنبه 28 آذر 1384, 00:34 صبح
ذخیره تاریخ میلادی و شمسی در دیتابیس، فضای ناچیزی رو اشغال میکنه و در مقابل منفعتی که شما از این کار میبرید، به هیچ عنوان قابل توجه نیست. اگر تا این حد مصرف شدن فضای دیسک مهم باشه، پس هیچ وقت نباید در دیتابیس Index بسازید!

خیلی ممنون پس از این به بعد دوتا تبیل برای تاریخ می سازم یکی میلادی و یکی شمسی :چشمک:

استاد عزیز جناب اقای ثباتی انشا الله بتونیم روزی این مهر و محبتتون را پاسخ بدیم و از شرمندگی شما در بیاییم :لبخندساده
سپاسگذارم
:تشویق:

AminSobati
دوشنبه 28 آذر 1384, 10:31 صبح
اختیار دارید!..

mahak_f
دوشنبه 16 بهمن 1385, 10:07 صبح
یعنی تاریخ رو از کاربر شمسی بگیریم بعد به میلادی تبدیل کنم و در بانک ذخیره کنم. در نهایت هم بعد از تبدیل به شمسی نتیجه رو نشون بدم؟
اخه گیر کار اینه که کاربر برنامه نمیتونه میلادی وارد کنه.

DonetKarvb
دوشنبه 16 بهمن 1385, 12:01 عصر
یعنی تاریخ رو از کاربر شمسی بگیریم بعد به میلادی تبدیل کنم و در بانک ذخیره کنم. در نهایت هم بعد از تبدیل به شمسی نتیجه رو نشون بدم؟
اخه گیر کار اینه که کاربر برنامه نمیتونه میلادی وارد کنه.
نه.!!
شما دو کار میتونید بکنید یکی اینکه تاریخ رو از کار بر به صورت شمسی بگیرید تبدیلش کنید به میلادی توی دیتابیس ذخیره اش کنید و هنگام نمایش باز هم تبدیلش کنید به شمسی ونمایش بدهید.
مبحث دوم هم این بود که شما دو ستون در نظر بگیرد یکی از نوع تاریخ و یکی از نوع کارکتر. هنگام ذخیره سازی تاریخ رو به صورت شمسی میگرید و به میلادی تبدیل میکنید و هر دو نوع تاریخ رو نگه داری میکنید و هنگام کار های محاسباتی بر روی فیلد تاریخ کار میکنید و هنگام نمایش از فیلد کارکتر که تاریخ شمی در آن به صورت کارکتر ذخیره شده است استفاده می کنید.

اَرژنگ
سه شنبه 17 بهمن 1385, 11:10 صبح
روش درست


تاریخ رو از کار بر به صورت شمسی بگیرید تبدیلش کنید به میلادی توی دیتابیس ذخیره اش کنید و هنگام نمایش باز هم تبدیلش کنید به شمسی ونمایش بدهید.
روش اشتباه


دو ستون در نظر بگیرد یکی از نوع تاریخ و یکی از نوع کارکتر. هنگام ذخیره سازی تاریخ رو به صورت شمسی میگرید و به میلادی تبدیل میکنید و هر دو نوع تاریخ رو نگه داری میکنید و هنگام کار های محاسباتی بر روی فیلد تاریخ کار میکنید و هنگام نمایش از فیلد کارکتر که تاریخ شمی در آن به صورت کارکتر ذخیره شده است استفاده می کنید.

DonetKarvb
سه شنبه 17 بهمن 1385, 11:15 صبح
روش درست
روش اشتباه
آرزژنگ جان این روشی نیست که من تاید و یا ردش کرده باشم فقط یک نتیجه گیری از تاپیک داشتم. در ضمن روش دوم هم از سوی استاد ثباتی پیشنهاد شده است. میتونم بپرسم چرا اشتباهه؟

اَرژنگ
سه شنبه 17 بهمن 1385, 12:46 عصر
آرزژنگ جان این روشی نیست که من تاید و یا ردش کرده باشم فقط یک نتیجه گیری از تاپیک داشتم. در ضمن روش دوم هم از سوی استاد ثباتی پیشنهاد شده است. میتونم بپرسم چرا اشتباهه؟
میدونم شما پیشنهاد نکردید ، اگر دقت کنید از شما نقل قول نکردم، تکیه بر درستی و اشتباهی روشها بود.

یکی از اصول برنامه نویسی و یا دیتابیس، نداشتن کپی از یک دیتا است. باید همیشه سعی کرد که ۲ تا دیتا را اگر ممکن هست یکی کرد و نه از یک دیتا ۲ تا کپی داشت.

DonetKarvb
سه شنبه 17 بهمن 1385, 13:35 عصر
میدونم شما پیشنهاد نکردید ، اگر دقت کنید از شما نقل قول نکردم، تکیه بر درستی و اشتباهی روشها بود.

یکی از اصول برنامه نویسی و یا دیتابیس، نداشتن کپی از یک دیتا است. باید همیشه سعی کرد که ۲ تا دیتا را اگر ممکن هست یکی کرد و نه از یک دیتا ۲ تا کپی داشت.
حرف شما متین ولی دو راهی که پیشنهاد شده بود یکی از آنها پرفرمنس بهتری داشت همانطور که داده ها را دوبار نگه داری میکرد و یکی دیگر هم حجم کمتری میگرفت و از قوانین نرمال سازی تبعیت میکرد ولی سرعت کمتری داشت.
در مورد گزینه اول بگوییم که Data WareHouse نیز از این قوانین بهره میگید یعنی از داده ها کپی های را نگه داری میکند برای اینکه در آن حجم عظیم اطلاعات پرفرمنس بهتری داشته باشد.
ولی بازم حق با شماست اینجا ترنزکشن ها بیشتر از سیستم OlAP هست پس باید از قوانین OLTP استفاده کنیم.