PDA

View Full Version : سوال: خواندن تاریخ از Database



مجتبی کجوری
پنج شنبه 30 اردیبهشت 1389, 10:08 صبح
سلام دوستان
من یک فیلد تاریخ توی table ام دارم و بعد از وارد کردن چند تاریخ حالا میخوام قسمتی از فیلدم رو بخونم مثل روز یا ماه و سال من تاپیک های زیادی رو گشتم ولی همشون توابع DateTime و Substring در مورد ورود تاریخ به Database هست نه خواندن تاریخ . ولی من میخوام با همین توابع تاریخی که قبلا وارد شده را بخونم.اگه کسی لطف کنه و کدش (query) رو برام بذاره ممنون میشم.

M.YasPro
پنج شنبه 30 اردیبهشت 1389, 11:46 صبح
سلام
تاریخ رو به چه صورت وارد کردید ؟
dataType در sql چی هست ؟

spring69
پنج شنبه 30 اردیبهشت 1389, 12:02 عصر
سلام.
اگه نوع فیلدت nvarchar هست و به این شکل تاریخ ها رو وارد میکنی: 1388/02/30 (که فکر کنم بهترین راه باشه)، query به این شکل میشه:


select substring(date,1,4) as sal,substring(date,6,2) as mah,substring(date,9,2) as rooz from building


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

مجتبی کجوری
پنج شنبه 30 اردیبهشت 1389, 15:16 عصر
دوست عزیز نام فیلدم tarikh و نوعش nvarchar هست ضمنا دستور substring که در query وجود نداره مشکل من هم همینه.

spring69
پنج شنبه 30 اردیبهشت 1389, 16:34 عصر
دوست عزیز نام فیلدم tarikh و نوعش nvarchar هست ضمنا دستور substring که در query وجود نداره مشکل من هم همینه.

دستور substring در sql هم وجود داره.
شما به این شکل بنویسید:

SqlDataAdapter ad = new SqlDataAdapter("select substring(tarikh,1,4) as sal,substring(tarikh,6,2) as mah,substring(tarikh,9,2) as rooz from building", "Data Source=.\\sqlexpress;Initial Catalog=schools;Integrated Security=True");
DataTable dt = new DataTable();
ad.Fill(dt);
DataGridView1.DataSource = dt;




فقط به جای کانکشین استرینگی که من نوشتم، کانکشن استرینگ خودت رو بنویس و به جای building اسم جدول خودت رو بنویس و به جای DataGridView1 اسم دیتاگرید خودت رو.
اگه مشکلی بود در خدمتم.

[/left]

Open-Source
پنج شنبه 30 اردیبهشت 1389, 18:56 عصر
نوع 100% استاندارد ذخیره تاریخ باید به این صورت باشه که: روز - ماه - سال هر کدوم یه فیلد جدا داشته باشند.

ezamnejad
پنج شنبه 30 اردیبهشت 1389, 20:48 عصر
نوع 100% استاندارد ذخیره تاریخ باید به این صورت باشه که: روز - ماه - سال هر کدوم یه فیلد جدا داشته باشند.

به نظر من که این روش به چند دلیل نمیتونه درست باشه :
1- اگر قرار بود تاریخ به این شکل ذخیره بشه هیچ وقت نوع datetime ایجاد نمیشد
2- اگر توی برنامه نیاز باشه تاریخ مقایسه بشه باید دستورات زیادی برای مقایسه فیلدها بنویسیم که منطقی نیست
3- برای نمایش اطلاعات هم باید سه فیلد ترکیب و بعد نمایش داده شوند که بازهم نیاز به کدنویسی اضافی داریم

به نظر من راه بهتر اینه که تاریخ را به صورت میلادی و نوع datetime ذخیره کنید که در اینده مشکلات کمتری داشته باشید . برای تبدیل این تاریخ هم روشهای زیادی وجود داره که میتونید از دو روش زیر هم استفاده کنید .
http://barnamenevis.org/forum/showthread.php?t=220772

hojjatshariffam
پنج شنبه 30 اردیبهشت 1389, 21:10 عصر
این تاپیک رو هم ببینید
http://barnamenevis.org/forum/showthread.php?t=221800
در مورد این طور مسائل زیاد در سایت بحث شده ، لطفا قبلا سرچ کنید

Open-Source
جمعه 31 اردیبهشت 1389, 12:48 عصر
بله دوست عزیز حق با شماست.
اگه تاریخ رو بصورت میلادی ذخیره کنیم (در نوع datetime ) روش خوبی هستش؛ چون کار با تاریخ میلادی به دلیل توابع زیاد راحت تر و سریع تره.
ولی اگه بخواهیم تاریخ شمسی رو در یک رشته 10 کاراکتری ذخیره کنیم بعدا برای کار روی آن به مشکل بر میخوریم(نمونه اش مشکل همین دوستمون).
در ضمن:
سطح اول نرمال سازی یک بانک اینه که فیلد مرکب (در اینجا تاریخ شمسی) در بانک وجود نداشته باشه.
:لبخندساده:

mohsensaghafi
جمعه 31 اردیبهشت 1389, 14:08 عصر
سطح اول نرمال سازی یک بانک اینه که فیلد مرکب (در اینجا تاریخ شمسی) در بانک وجود نداشته باشه.
دوست عزیز.
حرف شما درسته اما باید توجه داشت که فیلد مرکب در پروژه های مختلف با توجه به دید پروژه به یک فیلد متغیر هست. مثلا همین تاریخ می تونه تو یه پروژه مرکب باشه و تو یه پروژه دیگه ساده.
برای مثال به فیلد ماشین فکر کن. آیا فیلد ماشین مرکب است یا نه؟!
برای اینکه حرف من واضح تر بشه ماشین رو توی پروژه کارخانه ماشین سازی، مدیریت ارسال عملیات در یک شرکت پست، و واحد موتوری یک سازمان مقایسه کن. تو اولی قطعا به فیلد مرکب هست و تو دومی یه متغیر از نوع Boolean و در سومی فقط لازمه که شماره پلاک خودرو رو ذخیره کنی.
پس یه فیلد نمی تونه لزوما مرکب باشه یا ساده. بستگی داره که از این فیلد چه استفاده ای می خوای بکنی. تاریخ هم همینطوره.

Open-Source
جمعه 31 اردیبهشت 1389, 14:44 عصر
دوست عزیز.
حرف شما درسته اما باید توجه داشت که فیلد مرکب در پروژه های مختلف با توجه به دید پروژه به یک فیلد متغیر هست. مثلا همین تاریخ می تونه تو یه پروژه مرکب باشه و تو یه پروژه دیگه ساده.
برای مثال به فیلد ماشین فکر کن. آیا فیلد ماشین مرکب است یا نه؟!
برای اینکه حرف من واضح تر بشه ماشین رو توی پروژه کارخانه ماشین سازی، مدیریت ارسال عملیات در یک شرکت پست، و واحد موتوری یک سازمان مقایسه کن. تو اولی قطعا به فیلد مرکب هست و تو دومی یه متغیر از نوع Boolean و در سومی فقط لازمه که شماره پلاک خودرو رو ذخیره کنی.
پس یه فیلد نمی تونه لزوما مرکب باشه یا ساده. بستگی داره که از این فیلد چه استفاده ای می خوای بکنی. تاریخ هم همینطوره.

دوست عزیز، منم همین رو گفتم.
بسته به کاربرد خودت میتونی هر کاری بکنی:لبخندساده:.
ولی آدم باید آینده نگر باشه.
همین مسائل پیش پا افتاده توی پروژه های بزرگ باعث میشه به مشکل برخورد کنی.
ولی، بازهم خود دانی...
End

ezamnejad
جمعه 31 اردیبهشت 1389, 14:46 عصر
به نظر من نباید تاریخ را به صورت مرکب در نظر گرفت و آن را در چند فیلد ذخیره کرد و چون sql از تاریخ شمسی پشتیبانی نمیکنه بهتره به صورت میلادی ذخیره بشه . حتی اگر نخواهید به صورت میلادی ذخیره کنید به نظر من استفاده از یک رشته 10 کاراکتری روش مناسبتری به نظر میرسه . چون در صورت نیاز به مقایسه رکوردها بر اساس تاریخ هم مقایسه راحت تر انجام میشه و هم نمایش تاریخ ساده تر خواهد بود.