لماذا يقوم SQL Server حول نتائج تقسيم اثنين من الأعداد الصحيحة؟

StackOverflow https://stackoverflow.com/questions/723215

  •  05-09-2019
  •  | 
  •  

سؤال

لدي جدول مع عمود صغير يحتوي على النسب المئوية كأرقام كاملة (أي، 50، 75، 85، إلخ)

عندما أقسم هذا العمود بنسبة 100، كما هو الحال في

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE

يتم تقريب النتيجة إلى أقرب عدد صحيح. على سبيل المثال، على سبيل المثال يحتوي على الرقم "50"، أحصل على صفر كنتيجة.

يمكنني تكرار هذا مع بيان بسيط:

SELECT 50 / 100 AS TEST_VALUE

لماذا هذا، وكيف يمكنني الحصول على المزيد من الدقة في نتيجة بلدي؟

هل كانت مفيدة؟

المحلول

عند قيام قسم عدد صحيح (عدد صحيح مقسوم عن طريق عدد صحيح)، يمكنك دائما الحصول على إجابة عدد صحيح. 50/100 = .50، وهو 0 في عدد صحيح - يتحدث.

هل حاولت تقسيم my_column من 100.0؟

نصائح أخرى

يلقي الأرقام الكاملة.

SELECT (cast(50 AS float)/100)

أنت تفعل قسم عدد صحيح. 50/100 هو 0 مع بقية 50.

تحتاج إلى استخدام قسم النقطة العائمة.

NB - كن حذرا في أن ما تبقى من قسم عدد صحيح غير مدور. بدلا من ذلك، يتم إسقاطها. هذا يعادل استدعاء وظيفة SQL الكلمة.

هذا شائع، ويتم تعريفه على هذا النحو لأنه عند ضرب اثنين من الأعداد الصحيحة، لن يحدث كسر أبدا. لذلك لا يتم افتراض منهجية معالجة الكسر مطلقا عند ضرب الأعداد الصحيحة، ولكن لا يمكن قول الشيء نفسه عن قسم عدد صحيح.

هذا يمكن أن يكون له تأثير فعال عند القيام حساب تاريخي في SQL.

عندما تستخدم /(يقسم) المشغل عليه

إرجاع نوع البيانات من الوسيطة مع الأسبقية العالية.

و

إذا تم تقسيم أرباح عدد صحيح من قبل مقسم عدد صحيح، فإن النتيجة هي عدد صحيح لديه أي جزء كسور من النتيجة مقطوعة.

لذلك، تحتاج إلى استبطان واحد على الأقل من المعاملات إلى النوع المناسب: عشري وعددية أو تعويم أو حقيقي.

أنت تقسم 2 أعداد صحيحة تؤدي إلى عدد صحيح آخر.

يجب أن يلقي بهذه الطريقة، أيضا

حدد (50/100) :: رقمي؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top