PDA

View Full Version : query مناسب برای تاریخ و زمان



ayub_coder
دوشنبه 04 اردیبهشت 1391, 16:03 عصر
سلام دوستان
من توی تیبلم دوتا فیلد دارم که یکی تاریخ رو به صورت "1391/02/02" و او یکی ساعت رو به صورت "13:14" به صورت رشته نگه داری می کنه.
حالا باید دستوری بنویسم که رکوردهای که از تاریخ و ساعت الان قبلتره رو نشون بدم. حالا اگه بنویسم


SELECT * FROM tbl WHERE fdate<='1391/01/02' AND ftime<='14:30'

چو تاریخ مال دو روز پیشه ولی ساعت هنوز به اون ساعت نرسیده این عمل نمیکنه. پس باید کوئری طوری باشه که اول تاریخ چک شه اگه تاریخ کمتر از الان نبود بعد ساعت رو چک کنه. در غیر اینصورت چون تاریخ مال دو روز پیشه پس ساعت اهمیتی نداره.
بنظرتون راه حل چیه؟

MMSHFE
دوشنبه 04 اردیبهشت 1391, 16:36 عصر
دوست عزیز این روش طراحی، اصولی نیست. معمولاً timestamp رو توی دیتابیس ذخیره میکنن و موقع لزوم اون رو به فرمت مناسب تاریخ و زمان تبدیل کرده و نمایش میدن. اینطوری هم میشه راحتتر کارهایی مثل مقایسه و... رو انجام داد و هم اینکه حجم کمتری نسبت به نوع داده datetime یا varchar و... اشغال خواهد کرد (به دلیل عدم نیاز به فیلدهای اضافه برای تاریخ و زمان و غیره). موفق باشید.

ayub_coder
دوشنبه 04 اردیبهشت 1391, 19:38 عصر
میشه یه مثال بزنید؟ این روشی که گفتید؟

MMSHFE
دوشنبه 04 اردیبهشت 1391, 22:38 عصر
ببینید، شما توی دیتابیس یک فیلد مشترک برای زمان و تاریخ میگذارین و خروجی تابع ()time رو موقع ذخیره رکوردها توی اون فیلد قرار میدین. موقع خوندن و نمایش هم اون فیلد رو میخونید و بعنوان پارامتر دوم در اختیار تابع date یا jdate (برای تاریخ فارسی) میگذارین تا تاریخ و زمان رو بهتون اعلام کنه.

mze666
یک شنبه 19 شهریور 1391, 14:20 عصر
سلام - من یه دیتابیس دارم که تاریخ توی اون به صورت رشته ای زده شده مثلاً (1384/10/29) حالا میخوام تمام این تاریخ ها رو به Datetime تبدیل کنم - توی SQL چکار باید بکنم؟ خواهش میکنم کمکم کنید.

MMSHFE
یک شنبه 19 شهریور 1391, 19:33 عصر
این مورد رو به راحتی نمیشه انجام داد. باید یک اسکریپت بنویسید که همه رکوردها رو بخونه و یکی یکی تاریخ رو بگیره و سال و ماه و روز رو به تابع jmktime بدین تا Timestamp اون رو تولید کنه و در نهایت اون Timestamp رو دوباره ذخیره کنید.