سؤال

ولدي عمود من الأرقام المخزنة على حرف. عندما أقوم بعملية ORDER BY لهذا العمود أحصل على ما يلي:

100
131
200
21
30
31000
وما إلى ذلك.

وكيف يمكنني أن تأمر هذه حرف عدديا؟ هل أنا بحاجة لتحويل شيء أم أن هناك بالفعل أمر SQL أو وظيفة لهذا؟

وشكرا.

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

المحلول

وجرب هذا:

ORDER BY CAST(thecolumn AS int)

نصائح أخرى

وهذا عمل بالنسبة لي:

ORDER BY ABS(column_name)

وهذه قضية مع الطلب السلاسل الرقمية في "الفرز الطبيعي" (إذا كنت بحث "الفرز الطبيعي" على جوجل ستجد طن من الاشياء). صب أساسا سلسلة ك int ويجب فرز على القيمة الناتجة اصلاحها.

والسبب في ذلك هو أنه مع نوع البيانات شار، وأنت فرز الصفوف كسلسلة.

وكانت الفكرة لORDER BY CAST() صحيحة، لكن أداء هذا سوف تنخفض كما يزيد عدد النتائج التي تم إرجاعها.

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

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

ومؤشر العمود ترتيب وبشكل مثالي، إضافة الزناد إلى العمود CHAR بحيث إدراج أو التحديثات إلى القيمة شار تؤدي تحديثا لقيمة عدد صحيح.

في بعض الحالات قد تكون هذه مباراة جيدة:

ORDER BY LENGTH(column_name), column_name

وخصوصا إذا كان لديك عمود إما عن أرقام أو مزيج من الحروف والأرقام ولكن مع كل نفس الطول.

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