View Full Version : شمارش تعداد خطوط در یک ستون
حمیدرضاصادقیان
دوشنبه 17 خرداد 1389, 15:35 عصر
سلام دوستان. من هرچی گشتم در این مورد مطلبی پیدا نکردم.
به فرض من در یک فیلد سه خط جداگانه اضافه میکنم.این سه خط در برنامه خودم با کارکتر 13# که همون Enter هست از هم جدا میشوند. من میخوام ببینم آیا راهی هست در خود کوئری من بتونم مثلا خط اول رو حذف کنم؟؟
وقتی این اطلاعات رو به شی در دلفی مثل TStringlist پاس میدم اونجا میتونم مثلا یک خط رو حذف کنم ولی میخوام ببینم در خود کوئری امکان این کار هست یا خیر.
majidmir
دوشنبه 17 خرداد 1389, 15:46 عصر
سلام دوستان. من هرچی گشتم در این مورد مطلبی پیدا نکردم.
به فرض من در یک فیلد سه خط جداگانه اضافه میکنم.این سه خط در برنامه خودم با کارکتر 13# که همون Enter هست از هم جدا میشوند. من میخوام ببینم آیا راهی هست در خود کوئری من بتونم مثلا خط اول رو حذف کنم؟؟
وقتی این اطلاعات رو به شی در دلفی مثل TStringlist پاس میدم اونجا میتونم مثلا یک خط رو حذف کنم ولی میخوام ببینم در خود کوئری امکان این کار هست یا خیر.
سلام
دوست عزيز فك نكنم همچين چيزي توي خود Sql باشه (البته من در حد مبتدي هستم و زياد از امكاناتش مطاع نيستم :لبخندساده:)
ولي به نظر من بهترين كار اينه كه طول رشته رو براي مثال 60 بگيري و به سه قسمت 20 تايي تقسيمش كني و در هر بار با دستور اپديت اونو اپديت كني براي مثال 20 تاي اول را حذف كني:متفکر:
حمیدرضاصادقیان
دوشنبه 17 خرداد 1389, 16:11 عصر
سلام
سلام
دوست عزيز فك نكنم همچين چيزي توي خود Sql باشه (البته من در حد مبتدي هستم و زياد از امكاناتش مطاع نيستم :لبخندساده:)
ولي به نظر من بهترين كار اينه كه طول رشته رو براي مثال 60 بگيري و به سه قسمت 20 تايي تقسيمش كني و در هر بار با دستور اپديت اونو اپديت كني براي مثال 20 تاي اول را حذف كني:متفکر:
چرا دوست عزیز.این امکان دقیقا وجود داره.فقط باید یک مقداری با دستورات سیکوئل آشنا بود.
به روش زیر میشه اینکارو انجام داد.
SELECT Substring(doc,CHARINDEX(char(13),doc),len(doc)) FROM Tbl_test
با استفاده از دستور Charindex موقعیت جایی که اولین enter زده شده پیدا میشه و از اونجا به بعد رو شما میتونی استفاده کنی. با مقداری تغییر در همین کد شما میتونی خطهای مختلفی که نیاز داری رو بدست بیاری.
:خجالت:
محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 18:38 عصر
سلام
چرا دوست عزیز.این امکان دقیقا وجود داره.فقط باید یک مقداری با دستورات سیکوئل آشنا بود.
به روش زیر میشه اینکارو انجام داد.
SELECT Substring(doc,CHARINDEX(char(13),doc),len(doc)) FROM Tbl_test
با استفاده از دستور Charindex موقعیت جایی که اولین enter زده شده پیدا میشه و از اونجا به بعد رو شما میتونی استفاده کنی. با مقداری تغییر در همین کد شما میتونی خطهای مختلفی که نیاز داری رو بدست بیاری.
:خجالت:
سلام،
دستور فوق باید به این شکل در بیاید:
SUBSTRING(doc, CHARINDEX(CHAR(13), doc), LEN(doc) - CHARINDEX(CHAR(13), doc)) --ok
که البته من همیشه ترجیه میدم از تابع STUFF برای حذف کردن رشته استفاده کنم:
STUFF(doc, 1, CHARINDEX(CHAR(13),doc), '') --ok
حمیدرضاصادقیان
دوشنبه 17 خرداد 1389, 20:43 عصر
ممنون جناب سلیم آبادی .ولی من با همون کدی که نوشتم مشکلم حل شد. چون من میخواستم از خط دوم به بعد نوشته بشه که درست شد.
محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 20:50 عصر
در کد شما به یک نکته ای دقت نشده اونم این هست که در تابع substring پارامتر آخر که طول زیر رشته را مشخص می کنه شما باید به جای LEN(doc)--d بنویسید
LEN(doc)-CHECKSUM(CHAR(13),doc)-d
البته اگر بخواهیم منطقی به موضوع نگاه کنیم باید به شکلی که اشاره کردم رفتار کنیم ولی ظاهرا SQL Server با اون شیوه (که شما استفاده کردین) هم مشکلی نداره ولی باید تحقیق کرد.
حمیدرضاصادقیان
دوشنبه 17 خرداد 1389, 22:45 عصر
سلام.جالب شد.چرا؟ خوب من میخوام از خط دوم به بعد رو نمایش بدم.به همین خاطر ابتدا index اولین enter رو پیدا میکنم و از اونجا به بعد رو نمایش میدم.خوب چرا باید موردی که شما فرمودین رو بنویسم؟
میشه در این مورد بیشتر توضیح بدین؟؟
ممنونم.
محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 23:02 عصر
به تصویر زیر بطور کامل و دقیق توجه کنید:
http://www.barnamenevis.org/forum/attachment.php?attachmentid=50722&stc=1&d=1275937307
فرض کنید می خواهیم کلمه ی دوم رشته ی فوق را استخراج کنیم. برای این منظور ابتدا موقعیت کاراکتر space در رشته را میابیم و پس از آن تا آخر رشته را انتخاب می کنیم.
از یک خانه بعد از کاراکتر space تا آخرین کاراکتر، 6 کاراکتر موجود است. پس بایستی از موقعیت بعد از کاراکتر space تا 6 خانه بعد را به عنوان زیر رشته انتخاب کنیم. برای این منظور نمیشود از دستور زیر استفاده کرد:
SELECT SUBSTRING(@s, CHARINDEX(' ',@s)+1, LEN(@s))
زیرا طول رشته مورد نظر 10 کاراکتر است ولی ما نیاز به 6 کاراکتر داریم (یعنی طول زیر رشته ی Server برابر با 6 کاراکتر است). پس دستور به این شکل تبدیل میشود:
SELECT SUBSTRING(@s, CHARINDEX(' ',@s)+1, LEN(@s)-CHARINDEX(' ',@s))
امید وارم کامل متوجه شده باشید!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.