PDA

View Full Version : سوال: پيداكردن شماره اسنادثبت شده طي يك سال



Iran58
چهارشنبه 19 خرداد 1389, 07:19 صبح
سلام
يكسري شماره سند داريم كه بصوراتوماتيك ثبت مي شود(880002،880001،...)وهمچنين اين شماره اسنادباتوجه به تغييرسال شروع شماره اسنادهم ازنوع ثبت ميشود(890002،890001،...)
يعني دورقم اول باتوجه به سال عوض مي شود
حال سوال من اينست كه مي خواهم يك خروجي بدست بياورم كه هرگاه كاربر درtextboxمربوطه درفرم برنامه سال راواردكرد(سال89)sqlبياييد
الف)درجدول اول اولين شماره وآخرين شماره همان سال رابدست آورد
ب)جستجوكندبين اولين وآخرين شماره سندوهرشماره اي كه ثبت نشده است به مانشان دهد
باتشكر
اگرباكد توضيح دهيدبسيارممنون مي شوم

ASKaffash
چهارشنبه 19 خرداد 1389, 07:44 صبح
سلام
اگر دو فیلد میشد از نظر بهینه سازی مناسب بود ولی
1 :


Select * From T Where Convert(Tinyint,F/10000)=89
Select Max(F) From T Where Convert(Tinyint,F/10000)=89
Select Min(F) From T Where Convert(Tinyint,F/10000)=89

2 :
در همین تالار چند روز پیش بحث شده

ehsanham
چهارشنبه 19 خرداد 1389, 08:54 صبح
سلام
اگر دو فیلد میشد از نظر بهینه سازی مناسب بود ولی
1 :


Select * From T Where Convert(Tinyint,F/10000)=89
Select Max(F) From T Where Convert(Tinyint,F/10000)=89
Select Min(F) From T Where Convert(Tinyint,F/10000)=89

2 :
در همین تالار چند روز پیش بحث شده
سلام حالتون خوبه!من همشو مي فهمم اما اين F رو متوجه نميشم چيه و چرا تقسيم بر هزار ميشه.

ASKaffash
چهارشنبه 19 خرداد 1389, 09:02 صبح
سلام
F را فیلدی که مقادیر 890001 و ... دارد فرض کردم تقسیم برای اینکه در یک سال خاص عملیات را انجام دهیم

محمد سلیم آبادی
چهارشنبه 19 خرداد 1389, 10:22 صبح
سلام
اگر دو فیلد میشد از نظر بهینه سازی مناسب بود ولی
1 :


Select * From T Where Convert(Tinyint,F/10000)=89
Select Max(F) From T Where Convert(Tinyint,F/10000)=89
Select Min(F) From T Where Convert(Tinyint,F/10000)=89

2 :
در همین تالار چند روز پیش بحث شده

سلام،
ظاهرا نیازی به convert کردن وجود نداره.
یعنی دستور زیر کافی هست:

SELECT MIN(F), MAX(F) FROM T
WHERE F/10000 = 89

ولی پیشنهاد من این هست که از تابع LEFT استفاده بشه چون همانطوری که از مثال های پست اول پیداست طول داده ها زیاد معین نیست. پس کوئری به این شکل در میاد:



SELECT MIN(F), MAX(F) FROM table
WHERE LEFT(F,2)+0=89

Iran58
چهارشنبه 19 خرداد 1389, 13:44 عصر
سلام
باتشكرازجوابهاي شما
لطف كنيددرموردقسمت ب هم بنده راراهنمايي بفرماييدباتشكر

ASKaffash
چهارشنبه 19 خرداد 1389, 13:58 عصر
سلام
فکر کنم این لینک مرتبط است :
http://barnamenevis.org/forum/showthread.php?t=223957