فرز الحقل الأبجدي الرقمي في SQL CE (إصدار مضغوط) الإصدار 3.5

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

سؤال

فرز الحقل الأبجدي الرقمي في SQL CE (إصدار مضغوط) الإصدار 3.5

Treenumber هو حقل NvarChar مع مزيج من الأرقام والسلاسل للقيم. أرغب في فرز هذه السجلات بحيث تكون السجلات التي تحتوي على أحرف ألفا في الأعلى ويتم فرز الباقي بترتيب رقمي.

أريد شيئًا مشابهًا للاستعلام التالي الذي يعمل في SQL Server:

SELECT * FROM Tree
ORDER BY 
    (CASE WHEN TreeNumber LIKE '%[a-z]%' THEN 0 ELSE TreeNumber END), TreeNumber

لا يبدو أن الاستعلام أعلاه يعمل لأن النطاق [] غير مدعوم في CE. حل آخر يعمل مع SQL Server ولكنه لا يعمل في CE لأن "ISNumber ()" غير مدعوم أدناه:

SELECT * FROM Tree 
ORDER BY 
    (CASE IsNumeric(TreeNumber) WHEN 0 THEN 0 ELSE TreeNumber END), TreeNumber
هل كانت مفيدة؟

المحلول

حسنًا ، هذا الحل قبيح ، وليس لضعاف القلب. لم أختبر على SQL CE ، ولكنه يستخدم فقط T-SQL الأساسي لذلك يجب أن يكون على ما يرام. سيكون عليك إنشاء ملف طاولة العهد (فقط قم بتشغيل أول كتلة من الكود ، إذا كنت لا ترغب في قراءتها. فهو يستخدم tempdb لذلك ستحتاج إلى تغيير ذلك) ، وجدول لعقد كل حرف من الحروف الأبجدية (بسبب عدم مطابقة الأنماط المهام). بعد إنشاء جدول العصي (ليس عليك الانتقال إلى 11000 كما يظهر المثال) ، قم بتشغيلها ، وسترى سلوك الفرز الذي تريده

قم بإنشاء جدول الأبجدية (درجة الحرارة لأغراض التجريبية):

select *
into #alphatable
from
(

select 'A' as alpha union all
select 'B' union all
select 'C' union all
select 'D'
--etc. etc.
) x

قم بإنشاء طاولة شجرة (مؤقت لأغراض التجريبية):

select *
into #tree
from
(

select 'aagew' as TreeNumber union all
select '3' union all
select 'bsfreww' union all
select '1' union all
select 'xcaswf' 
) x

الحل:

select TreeNumber
from
(
select t.*, tr.*, substring(TreeNumber, case when N >  len(TreeNumber) then len(TreeNumber) else N end, 1) as singleChar
from tally t
cross join #tree tr
where t.N < (select max(len(TreeNumber)) from #tree)

) z
left join
#alphatable a
on z.singlechar = a.alpha
group by TreeNumber

order by case when max(alpha) is not null then 0 else TreeNumber end 

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

نصائح أخرى

هل الوظائف مدعومة في CE؟ يمكنك جعل وظيفة isnuemric الخاصة بك (char سهلة من قبل char parser ، على سبيل المثال) والاتصال بها في وقت لاحق في استفسارك

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