PDA

View Full Version : سوال: مقایسه دو تاریخ شمسی



سعید کشاورز
سه شنبه 28 آذر 1391, 11:06 صبح
سلام دوستان..من دارم دیتابیس پروژ ه ام رو طراحی میکنم ..
نیاز دارم تا عمل مقایسه تاریخ شمسی رو انجام بدم..
نوع فیلد دیتا بیس رو رشته(Text) در نظر بگیرم یا اینکه از نوع Date باید در نظر بگیرم ؟تا در زمانی که توی c# میخام عمل مقایسه رو انجام بدم راحت تر باشم؟

mousa1992
سه شنبه 28 آذر 1391, 11:28 صبح
سلام داداش خوبم
فیلد دیتابیس رو varchar(10) در نظر بگیر و تاریخ رو توش ذخیره کن برا مقایسه هم دوتا دشته رو میتونی مقایسه کنی حتی جستجوی بین دوتاریخ هم میشه و هر کاری که دلت بخواد :D موفق باشی خوب من

veniz2008
سه شنبه 28 آذر 1391, 11:59 صبح
نیاز دارم تا عمل مقایسه تاریخ شمسی رو انجام بدم..

سلام. من خودم همیشه nvarchar(10 می گیریم ( حداقل خوبیش اینه که اگر اعداد رو بصورت فارسی وارد کنید بصورت علامت سوال ذخیره نمیشه).البته شما باید تاریخ رو به یک شکل واحد ذخیره کنید یا ارقام رو بصورت انگلیسی ذخیره کنید یا بصورت فارسی که پیشنهاد میکنم بصورت انگلیسی ذخیره کنید. منظورتون از مقایسه اینه که کدوم تاریخ بزرگتر از تاریخ دیگه هست؟. اگر آره، تا جایی که من میدونم در سمت سی شارپ نمیشه عملگر بزرگتر ( < ) رو برای دو رشته بکار برد و خطای زیر رو به شما خواهد داد :

Operator '>' cannot be applied to operands of type 'string' and 'string'

سعید کشاورز
سه شنبه 28 آذر 1391, 13:44 عصر
سلام داداش خوبم
فیلد دیتابیس رو varchar(10) در نظر بگیر و تاریخ رو توش ذخیره کن برا مقایسه هم دوتا دشته رو میتونی مقایسه کنی حتی جستجوی بین دوتاریخ هم میشه و هر کاری که دلت بخواد :D موفق باشی خوب من
مرسی داداش گلـــــــــــــم

سلام. من خودم همیشه nvarchar(10 می گیریم ( حداقل خوبیش اینه که اگر اعداد رو بصورت فارسی وارد کنید بصورت علامت سوال ذخیره نمیشه).البته شما باید تاریخ رو به یک شکل واحد ذخیره کنید یا ارقام رو بصورت انگلیسی ذخیره کنید یا بصورت فارسی که پیشنهاد میکنم بصورت انگلیسی ذخیره کنید. منظورتون از مقایسه اینه که کدوم تاریخ بزرگتر از تاریخ دیگه هست؟. اگر آره، تا جایی که من میدونم در سمت سی شارپ نمیشه عملگر بزرگتر ( < ) رو برای دو رشته بکار برد و خطای زیر رو به شما خواهد داد :

Operator '>' cannot be applied to operands of type 'string' and 'string'

تاریخ رو با یه کامپوننت به دست میارم..که به شکل 01/02/1391 ذخیره میکنه..اعداد رو فارسی باید ذخیره کنم. بعدش مثلا میخام بدونم مثلا تاریخ A از تاریخ B بزرگتر هستش یا نه...فکر کنم باید رشته ها رو جدا کنم(سال،ماه،روز) بعدش از هم کم کنم تا بتونم این رو بدست بیارم..من میخاستم بدونم راه ساده تری هم وجود داره یا نه

NasimBamdad
سه شنبه 28 آذر 1391, 14:01 عصر
من با NvarChar ذخیره می کنم و با این فرمت
1391/01/01

بعد هم با این دستور مقایسه می کنم

Select * From tbl1 where Date BETWEEN '1391/05/01' AND '1395/01/01'

سعید کشاورز
سه شنبه 28 آذر 1391, 15:43 عصر
من با NvarChar ذخیره می کنم و با این فرمت
1391/01/01

بعد هم با این دستور مقایسه می کنم

Select * From tbl1 where Date BETWEEN '1391/05/01' AND '1395/01/01'

واسه بزرگتر یا کوچیکتر بودن هم این کار جواب میده؟ منظورم اینه < یا > یا =

veniz2008
سه شنبه 28 آذر 1391, 15:46 عصر
واسه بزرگتر یا کوچیکتر بودن هم این کار جواب میده؟ منظورم اینه < یا > یا =
اگه از دستورات sql استفاده کنی مشکلی ندارید(مثل همین کدی که دوستمون واست گذاشتن). بزرگتر یا کوچکتر هم جواب میده.

Nima_kyan
سه شنبه 28 آذر 1391, 17:07 عصر
سلام
دوست عزيز شما تو C#‎هم ميتونيد تاريخ ها رو بدون جدا كردن سال و ماه و روز با هم مقايسه كنيد.
به اين شكل

int temp=string.Compare(Date1,Date2);
if (temp==0)
تاريخ ها برابرند
else if (temp==1)
date1 بزرگتر است
else if (temp==-1)
date2 بزرگتر است

mehrbani
سه شنبه 28 آذر 1391, 19:49 عصر
راه درست و اصولی اون اینه که تاریخ ها رو ابتدا به میلادی تبدیل کنین و سپس در پایگاه داده به صورت DateTime ذخیره کنین

سعید کشاورز
سه شنبه 28 آذر 1391, 22:00 عصر
راه درست و اصولی اون اینه که تاریخ ها رو ابتدا به میلادی تبدیل کنین و سپس در پایگاه داده به صورت DateTime ذخیره کنین

مگه به صورت شمسی باشه چه مشکلی پیش میاد؟ من زیاد تجربه ندارم توی این زمینه..اگه میشه با دلیل توضیح بدین..ممنون میشم

aliphp1
سه شنبه 28 آذر 1391, 22:24 عصر
سلام
دوستان منم با همین موضوع درگیر هستم
موندم چطوری ذخیره کنم
اگه بخوایم تبدیل کنیم و بصورت DateTime ذخیره کنیم کسی می تونه راهنمایی کنه

Ghaem66
سه شنبه 28 آذر 1391, 22:30 عصر
به نظر من در مواردی که نیاز میشه رو تاریخ عملیاتی انجام بدیم تاریخ رو به صورت میلادی و datetime ذخیره کنیم خیلی بهتره. اگه هم تبدیل تاریخ به شمسی و میلادی واستون سخته میتونید یه فیلد اضافه برای جدولتون در نظر بگیرید و تاریخ میلادی متناسب با تاریخ شمسی رو داخلش ذخیره کنید و واسه عملیات از تاریخ میلادی و واسه نمایش از تاریخ شمسی استفاده کنید. البته این فقط یه پیشنهاد بود

Nima_kyan
چهارشنبه 29 آذر 1391, 10:02 صبح
راه درست و اصولی اون اینه که تاریخ ها رو ابتدا به میلادی تبدیل کنین و سپس در پایگاه داده به صورت DateTime ذخیره کنین

به نظر من در مواردی که نیاز میشه رو تاریخ عملیاتی انجام بدیم تاریخ رو به صورت میلادی و datetime ذخیره کنیم خیلی بهتره. اگه هم تبدیل تاریخ به شمسی و میلادی واستون سخته میتونید یه فیلد اضافه برای جدولتون در نظر بگیرید و تاریخ میلادی متناسب با تاریخ شمسی رو داخلش ذخیره کنید و واسه عملیات از تاریخ میلادی و واسه نمایش از تاریخ شمسی استفاده کنید. البته این فقط یه پیشنهاد بود
به قول دوستمون

مگه به صورت شمسی باشه چه مشکلی پیش میاد؟

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

veniz2008
چهارشنبه 29 آذر 1391, 10:32 صبح
ببینید همونطور که Nima_kyan (http://barnamenevis.org/member.php?155260-Nima_kyan) هم گفتن هر عملیاتی رو بخوایم میتونیم روی تاریخ شمسی ( بصورت رشته )انجام بدیم ولی ممکنه در بعضی موارد به چند خط کدنویسی نیاز پیدا کنید ولی برای نوع datetime یک سری توابع از پیش آماده شده وجود داره ( مثلا تفاوت دو تاریخ بر حسب روز یا ماه و ...یا اضافه کردن یه مقدار مشخص مثلا 2 روز به همه تاریخ ها و ...). اگر قرار باشه نوع رشته ای در نظر بگیرید (که خودمم به همین صورت استفاده میکنم) برای چنین حالاتی خودتون باید کدنویسی کنید ولی در کل به نظرم نمی ارزه آدم datetime ذخیره کنه و بعد بخواد اونو به شمسی تبدیل کنه. این دیگه بستگی به نظر و نیاز شما داره.
موفق باشید.

Ghaem66
چهارشنبه 29 آذر 1391, 16:23 عصر
شاید بشه هر عملیاتی رو تو سی شارپ با کد نویسی رو تاریخ شمسی انجام داد. اما داخل دستورات sql نمیشه به سادگی عملیات تاریخی رو روی تاریخ شمسی که به صورت رشته ذخیره شده رو انجام داد.

NasimBamdad
پنج شنبه 30 آذر 1391, 10:10 صبح
در کل منم 2 تا فیلد برای تاریخ داریم . یکی میلادی و از نوع DateTime ، و در نهایت یکی هم که معادل شمسی اون هست به صورت NvarChar و شمسی هست .

اما باید بگم که فکر کنم در SQL SErver 2008 و بالاتر میشه شمسی و به صورت DateTime ذخیره کرد .

فکر کنم توابغ هم به راحتی چون DateTime هست ، کار کنند !