PDA

View Full Version : مقایسه تاریخ ها برای صدور فاکتور



akobar
چهارشنبه 17 شهریور 1389, 18:29 عصر
سلام
من یک جدول دارم که باید رکوردهای یک نام مشخص که بین دو تاریخ معین هستند را برای صدور فاکتور داشته باشم
برای اینکار من این دستور را نوشتم ولی جواب نمیده
select * from main where((mosh_nam='اميد')and(date between'1389 /01 /05'and'1389 /06 /17'))
لطفا کمک کنید

بهزادصادقی
چهارشنبه 17 شهریور 1389, 19:32 عصر
lمشکل جیه؟ چه جوری جواب نمیده؟ خطا میده؟ سطرهای درست را جا می اندازه؟ سطر اضافی بر می گردانه؟

akobar
چهارشنبه 17 شهریور 1389, 22:04 عصر
آره
سطرهای درست را جا میندازه

بهزادصادقی
چهارشنبه 17 شهریور 1389, 22:13 عصر
چه جور سطرهایی را جا می اندازد؟ همه را؟ بعضی را که نزدیک به تاریخ اولی هستند؟ بعضی را که نزدیک تاریخ دومی هستند؟ به صورت راندوم؟ فقط یکی دو تا را یا خیلی ها را؟ اگر این دو تاریخ را عوض کنی چی؟ همیشه این کار را می کند یا فقط برای برخی از تاریخ ها؟

به همچنین، نوع ستون date شما چییست؟

و به همچنین، می بینم رشته تاریخ شما دو تا فاصله توش دارد. این عمدی است؟

akobar
چهارشنبه 17 شهریور 1389, 22:46 عصر
هیچی نمیاره
من این کدی که واستون نوشتم از debug کردن برنامم هست
و البته من از trim هم استفاده میکنم
ولی بازم جواب نمیده

بهزادصادقی
چهارشنبه 17 شهریور 1389, 22:52 عصر
دوباره: نوع ستون date تو چیست؟

فاصله هایی که من در رشته های تاریخ تو می بینم وسط رشته هستند، نه در گوشه هاش. تابع trim فقط فاصله های اول یا آخر رشته را بر می دارد. جرا وسط رشته تاریخ تو فاصله است؟

akobar
چهارشنبه 17 شهریور 1389, 23:01 عصر
ببخشید
از نوع nvarchar
آخه من تاریخها را بصورت روز ماه سال به فارسی تبدیل میکنم
بعد به هم وصل میکنم
ولی فکر نکنم فاصله داشته باشه

بهزادصادقی
چهارشنبه 17 شهریور 1389, 23:08 عصر
nvarchar چند؟ این ستون nvarchar شما جند کاراکتر دارد؟

آن کدی را که شما در بالای این صفحه درج کرده ای فاصله توش دارد. بین 1389 و حرف / یک فاصله است. بین 01 و / هم فاصله دیگری است. اگر cursor را آنجا فرار دهی و یک حرف را select کنی خودت خواهی دید. اگر تعداد کارکتر های ستون date شما همان طور که می حدس می زنم 10 باشد، این دو رشته ای را که شما داری روش search می کنی آنجا گیر نخواهی آورد، چرا که طول این دو 12 کاراکتر است.

akobar
چهارشنبه 17 شهریور 1389, 23:30 عصر
آره
طولش 10 هست
حالا لطفا میشه بگی چی کار کنم

بهزادصادقی
پنج شنبه 18 شهریور 1389, 00:11 صبح
فاصله های اضافی درون رشته های تاریخت را بکش بیرون.

فرض کن تو می خواهی لیست تمام دانش آموزانی که اسم کوچیکشان محمد است را بگیری. ولی کد تو در خواست تمام کسانی را می کند که اسم کوچکشان «مح م د» می باشد. به خاطر آن فاصله های اضافی، SQL Server کسی را گیر نمی آورد. شما اول باید اون فاصله های اضافی را حذف کنی. محمد برابر نیست با مح م د.

بیا، من این کار را برای تو کرده ام. خط اول در زیر همان خط کد توست که در بالا درج کرده بودییش. خط دوم را من با حذف کردن فاصله های اضاقی از درون رشته هایت به دست آورده ام. خط دوم را اجرا کن ببین جواب می دهد یا نه.



select * from main where((mosh_nam='????')and(date between'1389 /01 /05'and'1389 /06 /17'))
select * from main where((mosh_nam='????')and(date between'1389/01/05'and'1389/06/17'))


و یک چیز دیگه که همین الان متوجه آن شدم. کد حاضر فقط وقتی جواب خواهد داد که شما سطر یا سطرهایی در جدول main داشته باشی که ستون mosh_nam آنها برابر می باشد با رشته '????'. این را می دانستی، درست است؟