القوة العددية النظام على SQL Server 2005 varchar عمود يحتوي على أحرف و أرقام ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

لدي عمود يحتوي على السلاسل 'المشغل (1)' حتى 'المشغل (600)' حتى الآن.

أريد الحصول عليها عدديا أمر جئت مع

select colname from table order by 
cast(replace(replace(colname,'Operator (',''),')','') as int)

وهو جدا قبيحة جدا.

اقتراحات أفضل ؟

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

المحلول

إنه ذلك, InStr()/SubString(), تغيير المشغل(1) إلى المشغل(001), تخزين ن في مشغل(ن) على حدة ، أو إنشاء عمود محسوب أن يخفي القبيح سلسلة التلاعب.ما قد يبدو على ما يرام.

نصائح أخرى

إذا كنت حقا لديك ترك البيانات في شكل لديك وإضافة رقمي ترتيب العمود هو الحل الأفضل - ثم النظر في التفاف النص التلاعب في دالة معرفة من قبل المستخدم.

حدد colname من جدول ترتيب حسب dbo.udfSortOperator(colname)

انها أقل القبيح و يعطيك بعض التجريد.هناك إضافية علوية من استدعاء دالة ولكن على طاولة تحتوي على انخفاض الآلاف من الصفوف في ليس-أيضا-ضرب بشدة خادم قاعدة البيانات ليس مصدر قلق كبير.تقديم الملاحظات في وظيفة optomise في وقت لاحق كما هو مطلوب.

جوابي سيكون لتغيير المشكلة.أود إضافة operatorNumber الميدان إلى طاولة المفاوضات إذا كان ذلك ممكنا.تغيير تحديث/إدراج إجراءات استخراج عدد وتخزينها.أن طريقة تحويل سلسلة ضرب فقط مرة واحدة لكل سجل.

يأمر المنطق يتطلب تحويل الجملة في كل مرة يتم تشغيل الاستعلام.

حسنا, أولا تعريف معنى هذا العمود.هو المشغل اسم حتى تتمكن من تبرير استخدام حرف?أو هو الرقم ؟

إذا كان الحقل هو اسم ثم سيتم استخدام حرف ، ثم قد ترغب في تحديد طول ثابت.وسادة كل مشغل أسماء مع الأصفار على اليسار.تحديد قواعد تسمية للمشغلين (I. E.لا leters.أو الرموز التي سوف تستخدم في سلسلة مثل "A001")

فهرس سيتم فرز البيانات الفعلية في الخادم.و تعريف صحيح نص التسمية سيتم فرزها على الاستعلام.كنت تريد على حد سواء.

إذا كان المشغل هو عدد, ثم حصلت على نوع البيانات لهذا العمود خطأ يحتاج إلى تغيير.

فهرسة عمود محسوب

إذا كنت تجد نفسك يأمر أو الاستعلام operator عمود في كثير من الأحيان ، النظر في إنشاء عمود محسوب عن القيمة الرقمية و إضافة مؤشر على ذلك.هذا وسوف تعطيك محسوب/استمرار العمود (الذي يبدو وكأنه تناقض, ولكن ليس).

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