سؤال

هل من الممكن فرز العمود أبجديًا ولكن يتجاهل بعض الكلمات مثل على سبيل المثال "

على سبيل المثال

سيعود الاستعلام العادي

string 1
string 3
string 4
the string 2

وأود أن العودة

string 1
the string 2
string 3
string 4

هل هذا ممكن؟

تعديليرجى ملاحظة أنني أتطلع إلى استبدال كلمات متعددة مثل ، A ، إلخ ... هل يمكن القيام بذلك؟

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

المحلول

يمكنك المحاولة

SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))

لكن لاحظ أنه سيكون بطيئًا للغاية بالنسبة لمجموعات البيانات الكبيرة حيث يتعين عليه إعادة حساب السلسلة الجديدة كل صف.

IMO أنت أفضل حالًا مع عمود منفصل مع فهرس عليه.

لخطوط توقف متعددة فقط استمر في التعشيش REPLACE المكالمات. قون

نصائح أخرى

سيحل هذا محل كل شيء "على" كمثال

SELECT  *
FROM    YourTable 
ORDER BY REPLACE(Val,'The ', '')

نعم ، يجب أن يكون من الممكن استخدام التعبيرات مع جزء الطلب:

SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")

لدي قائمة موسيقى تزيد عن 75000 سجل وقد واجهت وضعًا مشابهًا. لقد كتبت نصًا PHP الذي فحص لجميع السلسلة التي بدأت بـ "A" أو "أو" أو "The" وقطعة هذا الجزء من السلسلة. لقد قمت أيضًا بتحويل جميع الأحرف الكبيرة إلى أحرف صغيرة وتخزين تلك السلسلة في عمود جديد. بعد تعيين فهرس على هذا العمود ، انتهيت.

من الواضح أنك تعرض العمود الأولي ولكن الفرز حسب العمود المفهرس الذي تم إنشاؤه حديثًا. أحصل على نتائج ثانية أو نحو ذلك الآن.

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