ترتيب SQL أبجديا دون الأصفار السابقة للأرقام أقل من 10

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

  •  19-09-2019
  •  | 
  •  

سؤال

هل من الممكن أن تطلب أبجديا في MySQL في الأزياء التالية:

A1.
A2.
A3.
A5.
A10.
A11
A20.
A23.
A24.

لسوء الحظ، يتم طلب الأمر الذي أحصل عليه كما هو موضح أدناه هنا. لاحظ كيف لم يتم تجميع أي عدد قبل A10 معا؟

A1.
A10.
A11
A12.
A2 <A2.
A20.
A23.
A24.
A3 <a3.
A5 <A5.

ملاحظة: هذه السلاسل الأبجدية الرقمية هي في الواقع رموز بريدية، لذلك لا يمكنني وضع A01، لأن هذا ليس بادئة رمز بريدية تقنيا. أود أيضا تجنب امتلاك المستخدم للدخول في بيانات أخرى لمساعدة النظام على فرزه بشكل صحيح، لأن مستخدمي ليسوا دافيون ويب للغاية. أيضا، لن تتمكن هذه السلاسل الأبجدية الرقمية من الإدخال في قاعدة البيانات بالترتيب الصحيح لأنه يمكن حذفها وإضافتها في أي وقت.

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

المحلول

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

...
ORDER BY SUBSTR(postalcode,2)+0

نصائح أخرى

إنشاء UDF الذي يحول varchar الخاص بك إلى قيمة رقمية. ثم استخدم هذه الوظيفة بالترتيب حسب جملة استفسارك.

تعمل دئتك بشكل أساسي على تعيين قيمة رقمية لكل صف، شيء مثل قيمة ASCII ل A (أو أيا كان الحرف الأول) * 100 + الرقمي المحور لبقية Varchar.

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

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

الطلب هو مرتب حسب الحروف الأبجدية.

ولكن تريد أن تطلب منهم كما لو كانوا أرقام. لسوء الحظ، لا يعطي ASC و DESC الكثير من المرونة.

نسختي من mysql., ، راكز جديدة، 2000، بقلم بول دوبوا (الآن خارجا قليلا) يقول

اعتبارا من MySQL 3.23.2، يمكنك أيضا تحديد تعبير كعمود فرز. على سبيل المثال، `ترتيب بواسطة Rand () إرجاع الصفوف في ترتيب عشوائي

إذا كانت هذه الميزة لا تزال متاحة، ويمكنك العثور على مدمج وظيفة أو يلقي لتحويل varchar إلى عدد صحيح، هل سيكون من الممكن ORDER BY هذه الوظيفة؟ أو، هل أنا أقرأ الكثير في ذلك؟

هممم، أعتقد أن بيل كاروين يعبر عنها بشكل أفضل.

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