الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف احصل على العدد الذي على يمين الفاصلة بTSQL

مغلق
بدأه ولد حمولة في 25 أكتوبر 2005 · 3 رد · 729 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي حقل رقمي اسمه total في السجلات التالية :

1500.25

950.852

14500.1

1586.64885

فكيف احصل بعبارة select على الكسور فتكون النتيجة :

25

852

1

64885

وشكرا

#2

؟؟؟

السؤال هذا بنفس الصيغة تماما حليناه من قبل!! هل كان واجبا مدرسيا؟؟

#3

هذا السؤال خاص بي وانا احتاجه في برنامجي واتمنى منك ان تدلني على الجواب

#4

قمت بتعديل العنوان لجعله أكثر ملاءمة للموضوع

-----------

معذرة على التأخير :s

جرب هذا الإجراء المخزن:

create procedure GetBerightDecimalPoint
@i float
as declare @mystr varchar(1000)
	declare @DotPlace int
	declare @SpacePlace int

	set @mystr=convert(varchar(1000), @i) 
	set @mystr=@mystr+' '

	set @DotPlace=patindex('%.%', @mystr) 
	set @SpacePlace=patindex('% %', @mystr)


	select substring(@mystr, @DotPlace+1, @SpacePlace) as NumRightPoint
go

حيث نقوم باستقبال العدد في شكل متغير من نوع float

المتغير @mystr هو لتخزين العدد في شكل string

والمتغيرين DotPlace@ و SpacePlace@ هما للبحث عن موضع الفاصلة العشرية ونهاية العدد على الترتيب.

ثم نقوم بتحويل العدد لstring ونبحث عن موضع كل من الفاصلة العشرية ونهاية العدد باستعمال الدالة patindex التي تقوم بالبحث عن pattern معين داخل النص الممرر لها (تعادل تقريبا InStr في VB6/net و IndexOf في Java)

ثم يقوم الإجراء باقتطاع الجزء الواقع ما بين الموضع التالي للفاصلة العشرية وحتى نهاية العدد باستعمال الدالة substring.

مشكلة هذا الإجراء أنه باستعمال النوع decimal من 23 و 8 لاستقبال العدد، أي 23 خانة منها 8 خانات عشرية، فسيملأ الخانات العشرية الفارغة أصفارا، أما إذا جعلنا عدد الخانات العشرية أقل فسيلجأ للتقريب.

نفس الحال باستعمال النوع real سواء بتحديد تفاصيل الخانات أم بدون تحديدها.

أما باستعمال النوع float لاستقبال العدد، فسيستعمل التقريب لخانتين فأقل في حال كانت مجمل خانات العدد أكثر من 6 خانات.

على أي حال، مثال لتنفيذ هذا الإجراء المخزن:

exec GetBerightDecimalPoint 1234.252

-------------------------------

نجحت المحاولة باستخدام النوع sql_variant لاستقبال العدد. :o

في انتظار آرائكم

;)

تم تعديل هذه المشاركة بواسطة walcom في 20 فبراير 2006 في 13:42

فكر بطريقة أخرى

هذا الموضوع مغلق.

مواضيع مشابهة