ورود

View Full Version : مشکل با Between در SQL



snackeye
سه شنبه 05 مهر 1390, 09:39 صبح
سلام

من یه table دارم که توش یه فیلد با فرمت Date/Time هست
توی این فیلد داده هایی با این مقدارها داریم :

1390/04/23

1390/02/05

1390/06/16

1390/12/12

حالا میخوام یه گزارش بین 2 تا تاریخ خاص بگیرم مثلا بین 1390/01/01 تا 1390/06/02

این کد رو توی SQL میزنم :


select * from mytable where date between 1390/01/01 and 1390/06/02


اما هیچ چیزی رو گزارش نمیکنه !!!! حتی با تاریخ میلادی هم تست کردم همین جوریه ! :ناراحت: با حالت های مختلف هم تست کردم مثلا استفاده از - به جای / یا توی پرانتز گذاشتن تاریخ ها یا ........

دیتابیسم هم ADO هست .

ممنون از همگی

AMIBCT
سه شنبه 05 مهر 1390, 10:00 صبح
این مقداری که شما وارده کرده‌اید یعنی 1390 تقسیم بر 1 تقسیم بر یک

تاریخ رو باید با نوعی در بانک ذخیره کنید که قابلیت مقایسه داشته باشه
مثلا روز جولین یا timestamp یونیکس یا نوع تاریخ زمان که در پس‌زمینه یکی از همین نوع‌ها هست

یوسف زالی
سه شنبه 05 مهر 1390, 10:08 صبح
از کاراکتر ' استفاده کنید.
Date between '1390/01/01' and '1390/05/01' -- test

snackeye
سه شنبه 05 مهر 1390, 10:24 صبح
ممنون از شما - اما با ' که ایراد میگیره چون فرمتش DateTime هست و فکر نکنم وقتی هم که فرمت date باشه / معنی تقسیم بده :متفکر: - در مورد ذخیره کردن هم خودش اینجوری سیو میکنه دیگه !! ؟؟ با / - پس باید چیکار کنم ؟ البته به جز اینکه بخوام نوع داده ها رو عوض کنم از اول ؟؟

یوسف زالی
سه شنبه 05 مهر 1390, 10:48 صبح
نه.
فرمت datetima که نباید با فرمت غیر خودش قیاس بشه.
شما باید ورودی هاتون و فرمت ذخیره شده هردو در یک فرمت باشند.
اگر نیست باید قبلش حتما تبدیل به استانداردتون بشن.

snackeye
چهارشنبه 06 مهر 1390, 02:13 صبح
ممنون اما درست متوجه نشدم - الان فرمتشون یکیه دیگه

SYNDROME
چهارشنبه 06 مهر 1390, 08:35 صبح
با سلام
اگر می خواهید تاریخ را شمسی ذخیره کنید بهتر است از فرمت رشته ای استفاده کنید و تاریخ را به شکل ##/##/#### در بانک ذخیره کنید و در هنگام جستجو به صورت رشته مقایسه کنید و چون طول تاریخ شما 10 کاراکتر است می توانید از between استفاده کنید ولی سرعت جستجو پایین می آید.
ولی در زمانی که با فرمت DateTime می خواهید ذخیره کنید باید تاریخ را به میلادی تبدیل کنید و سپس در هنگام نمایش به شمسی تبدیل کنید و در هنگام جستجوی با استفاده از تاریخ میلادی جستجو را انجام دهید و به راحتی توابع SQl روی آن جواب می دهد.
موفق باشید

snackeye
چهارشنبه 06 مهر 1390, 09:00 صبح
ممنون اما مشکل اینجاس که من با تاریخ میلادی و فرمت DateTime هم تست کردم همین مشکل رو دارم !!!!!

goldkavir
چهارشنبه 06 مهر 1390, 12:07 عصر
کدتون مشکلی نداره جز اینکه باید تاریخ مورد نظر توی single Qutation باشه یعنی اینجوری
select * from mytable where date between '1390/01/01' and '1390/06/02' a