View Full Version : سوال: ذخیره تاریخ در پایگاه
mahasti
دوشنبه 11 آذر 1392, 12:22 عصر
نحوه ذخیره تاریخ در پایگاه
daffy_duck376
دوشنبه 11 آذر 1392, 13:53 عصر
اگه شمسی هست از nchar(10) استفاده کن
nunegandom
دوشنبه 11 آذر 1392, 14:30 عصر
سلام، daffy_duck376 جان بعد میشه از between برای جست و جو بین تاریخ ها استفاده کرد؟
fakhravari
دوشنبه 11 آذر 1392, 15:18 عصر
nvarchar بگیری بهتره.
اره میشه
daffy_duck376
دوشنبه 11 آذر 1392, 17:31 عصر
اما حتما طولش رو 10 بگیرید . دوستان توجه داشته باشن که متغیر date هم تاریخ شمسی رو ساپورت میکنه و میتونید از تمامی توابع date در sql ازش استفاده کرد اما در جاهای خاصی باگ داره مثلا اردیبهشت رو 30 روزه حساب میکنه و 31 اردیبهشت توش ذخیره نمیشه!
sh.eng
دوشنبه 11 آذر 1392, 20:20 عصر
سلام. برخلاف نظر دوستان، من پیشنهاد میکنم حتما بصورت datetime ذخیره کنید. و به وسیله کد نویسی به شمسی و برعکس تبدیل کنید.
علت: ایندکس گذاری مناسب بر روی فیلد تاریخ، فراخوانی و جستجوی سریع تر، روش مناسب آرشیو کردن و...
fakhravari
دوشنبه 11 آذر 1392, 20:44 عصر
sh.eng اشتباه نکنید موارد علت برای تاریخ شمسی.
i.RB92
سه شنبه 12 آذر 1392, 07:24 صبح
سلام. برخلاف نظر دوستان، من پیشنهاد میکنم حتما بصورت datetime ذخیره کنید. و به وسیله کد نویسی به شمسی و برعکس تبدیل کنید.
علت: ایندکس گذاری مناسب بر روی فیلد تاریخ، فراخوانی و جستجوی سریع تر، روش مناسب آرشیو کردن و...
دقیقا روش اصولی همینه، موارد علتم کاملا درسته:)
mahasti
سه شنبه 12 آذر 1392, 08:24 صبح
من تاریخو بصورت میلادی تو دیتابیس ذخیره میکنم اما میخوام موقع خوندن تو دیتاگریدم بصورت شمسی نشون بده باید چیکار کنم؟تو سایت توابع تبدیل آورده شده اما من نمیدونم تو دیتاگرید از این توابع چطور استفاده میشه؟لطفا راهنماییم کنین؟
i.RB92
سه شنبه 12 آذر 1392, 10:08 صبح
شما کافیه قبل از نمایش با استفاده از این روش (http://persiadevelopers.com/articles/persia.aspx) تاریخهاتون رو تبدیل کنید.
actros
سه شنبه 12 آذر 1392, 10:37 صبح
Datatype رو Datetime2 بذارید.شمسی هم ساپورت میکنه
من تاریخو میلادی ذخیره می کنم و موقع خوندن با استفاده از این تابع شمسیش می کنم :
اینو تو یه BasePage بنویسید که بقیه اونو به ارث ببرن
Public Function PersianDate(Mdate As DateTime) As String
Dim ps As New PersianCalendar()
Return String.Format("{0}\{1}\{2}", ps.GetDayOfMonth(Mdate), ps.GetMonth(Mdate), ps.GetYear(Mdate))
End Function
نحوه استفاده تو CodeBehind
lblTime.text=PersianDate(mytable.mytime)
monire.6767
سه شنبه 12 آذر 1392, 15:00 عصر
ولی بنظر من بهتر که int ذخیره بشه بصورت 10رقمی که یک عدد رو میده موقع نمایش دو رقم دورقم جدا کنید و / بگذارید برای اینکه وقتی دو تا تاریخ را میخواهید مقایسه کنید یا مثلا بین دو تا تاریخ موارد ثبت شده را میخواهید جستجو کنید دو تا عدد را باهم مقایسه میکند خیلی بهتر است
fakhravari
سه شنبه 12 آذر 1392, 15:53 عصر
هر کی برای خودش دلیلی داره.
اما من دلیل میگم و خودتون بشینین قضاوت کنید.
ما زبونمون فارسی و وقتی میخواهیم تاریخ بخونیم میگیم 92/1/1 نمیگیم 1932/4/5 .
یه زمان نیاز یه داده ای رو بین 2 تاریخ بیارین.
اگذ داده میلادی سیو کنید وقتی داده دیتابیس میبینید تشخیس بسیار سخته اما اگه فارسی باشه به راحتی قایل تشخیص.
به صورت فارسی سیو کردن هم در سرعت شما کمک میکنه و هم هیچ مشکلی در query ایجاد نمیکنه.
حالا با خدتونه بیاین 6 تا روش بزنید به هم تا ترجمه بشه این تاریخ.:چشمک:
i.RB92
چهارشنبه 13 آذر 1392, 07:56 صبح
ما زبونمون فارسی و وقتی میخواهیم تاریخ بخونیم میگیم 92/1/1 نمیگیم 1932/4/5 .
کی گفت بگیم 1932/4/5؟؟
شما وقتی تاریخ رو به صورت یه رشته استرینگ فارسی به قول خودت ذخیره میکنی چجوری اونارو باهم مقایسه میکنی؟ چجوری اونارو سورت میکنی؟ چجوری اعمال دیگه ای که روی نوع تاریخ میشه انجام داد رو روش انجام میدی؟
پس نوع date رو برای کی گذاشتن؟؟
monire.6767
چهارشنبه 13 آذر 1392, 09:07 صبح
نوع dateاصلا قایل مقایسه نیس یادش بخیر من همه راه ها رو امتحان کردم مخصوصا وقتی بین دو تا تاریخو میخواین
taghi.km
چهارشنبه 13 آذر 1392, 10:39 صبح
به نظر منم استفاده از INT راه بهتری نسبت به بقیه هست
راحتر میشه باهاش کار کرد
fakhravari
چهارشنبه 13 آذر 1392, 14:24 عصر
شوخیت گرفته؟
اینایی که میگم تجربه میگه.
تمام موارد query روش قابل پیادست.
بعد ها پی میبری
sh.eng
چهارشنبه 13 آذر 1392, 21:31 عصر
sh.eng اشتباه نکنید موارد علت برای تاریخ شمسی.
هر کی برای خودش دلیلی داره.
اما من دلیل میگم و خودتون بشینین قضاوت کنید.
ما زبونمون فارسی و وقتی میخواهیم تاریخ بخونیم میگیم 92/1/1 نمیگیم 1932/4/5 .
یه زمان نیاز یه داده ای رو بین 2 تاریخ بیارین.
اگذ داده میلادی سیو کنید وقتی داده دیتابیس میبینید تشخیس بسیار سخته اما اگه فارسی باشه به راحتی قایل تشخیص.
به صورت فارسی سیو کردن هم در سرعت شما کمک میکنه و هم هیچ مشکلی در query ایجاد نمیکنه.
حالا با خدتونه بیاین 6 تا روش بزنید به هم تا ترجمه بشه این تاریخ.:چشمک:
شوخیت گرفته؟
اینایی که میگم تجربه میگه.
تمام موارد query روش قابل پیادست.
بعد ها پی میبری
در مورد تجربه: من در تمام پروژه های وب و تحت ویندوز از روشی که گفتم استفاده کردم. و به هیچ وجه به مشکل بر نخوردم. نمیدونم چرا شما اصرار بر کار غیر اصولی دارید!؟
با روش شما ایندکس گذاری معنی نداره! شما تاریخ را رشته معرفی میکنید! بهتر است نگاهی به کتاب ها و منابع پیشرفته sql بندازید آن وقت متوجه میشید با ایندکس گذاری بر روی تاریخ به چه اندازه جستجو، فراخوانی، آرشیو و... خود را بهینه می کنید.
باز هم میگم شک نکنید معرفی کردن رشته برای این نوع استفاده کار کاملا اشتباهی است.
موفق باشید.
fakhravari
چهارشنبه 13 آذر 1392, 22:50 عصر
:چشمک: شاد باشی .
برای خارجی هاست این چیزی که میگی.
ذخیره به صورت میلادی هیچ تاثیری روی کار ما نداره و جست جوها هم سختر می کنه.
نگران سرعت و ای چیزاهم نباش.
و در پایان اخرین پستم.
شک نکن راحت تر میتونی کار کنی وقتی بتونی فارسی سیو کنید
و باز شک نکن:بامزه:.
اوایل برنامه نویسی منم همین کارا میکردم اما بعد ها پشیمون شدم.
ghiasvand_2008
چهارشنبه 13 آذر 1392, 23:10 عصر
منم اوایل به صورت میلادی میزدم و کلی تبدیل نوع،حرفای دوستان همگی به دلایل خودشون درست میگن من تجربه خودم رو میگم که رشته ایی بگیری خیلی بهتره دردسر کمتر داره همین.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.