Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जावास्क्रिप्ट ओरेकल में ऑर्डर की तरह एक ऐरे को सॉर्ट करना

Iirc, Oracle एक 3-स्तरीय शब्दावली छँटाई लागू करता है (लेकिन एलेक्स पूल की सलाह पर ध्यान दें और पहले NLS सेटिंग्स की जाँच करें):

  • आधार वर्णों के आधार पर प्रथम श्रेणीबद्ध करें केस और विशेषक को अनदेखा करते हुए, मिलान क्रम में अक्षरों के बाद अंक आते हैं।
  • दूसरा, संबंधों पर विशेषक का सम्मान करते हुए, मामले को अनदेखा करना।
  • तीसरा, संबंधों के आधार पर क्रमबद्ध करें।

आप javascript locale apis एक कस्टम तुलना फ़ंक्शन में बारी-बारी से प्रत्येक चरण की नकल करके, मिलान अनुक्रम में अक्षर-अंकों के व्युत्क्रम के अपवाद के साथ।

10 सन्निहित कोड बिंदुओं की पहचान करके बाद वाले को संभालें जो अंकों का प्रतिनिधित्व नहीं करते हैं और जो कोड बिंदुओं के सेट से परे हैं जो आपके द्वारा सॉर्ट किए जा रहे स्ट्रिंग्स में हो सकते हैं। चुने हुए कोड बिंदु सीमा पर मानचित्र अंक क्रम को संरक्षित करते हुए। जब आप सॉर्ट करते हैं, तो यूनिकोड कोलेटिंग एक्सटेंशन 'डायरेक्ट' निर्दिष्ट करें जिसका अर्थ है 'कोड पॉइंट द्वारा सॉर्ट करना'। छँटाई के बाद रीमैप करें।

नीचे दिए गए PoC कोड में मैंने कुछ सिरिलिक वर्ण चुने हैं।

function cmptiered(a,b) {
    //
    // aka oracle sort
    //
    return lc_base.compare(a, b) || lc_accent.compare(a, b) || lc_case.compare(a, b);
}  // cmptiered

var lc_accent   = new Intl.Collator('de', { sensitivity: 'accent' });
var lc_base     = new Intl.Collator('de-DE-u-co-direct', { sensitivity: 'base' });
var lc_case     = new Intl.Collator('de', { caseFirst: 'lower', sensitivity: 'variant' });

var array = ['Ba12nes','Apfel','Banane','banane','abc','ABC','123','2', null, 'ba998ne' ];

// Map onto substitute code blocks
array = array.map ( function ( item ) { return (item === null) ? null : item.replace ( /[0-9]/g, function (c) { return String.fromCharCode(c.charCodeAt(0) - "0".charCodeAt(0) + "\u0430".charCodeAt(0)); } ); } );

array.sort(cmptiered);

// Remap substitute code point
array = array.map ( function ( item ) { return (item === null) ? null : item.replace ( /[\u0430-\u0439]/g, function (c) { return String.fromCharCode(c.charCodeAt(0) - "\u0430".charCodeAt(0) + "0".charCodeAt(0)); } ); } );

संपादित करें

फ़ंक्शन cmptiered नीना स्कोल्ज़ की टिप्पणी के बाद सुव्यवस्थित।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. v$ दृश्यों तक पहुंच कैसे प्रदान करें (v$session ,v$instance)

  2. मैं रिकॉर्ड प्रकार की थोक एकत्रित तालिका से कैसे चयन करूं?

  3. Search_condition के मान के बाद Oracle बाधा क्वेरी करें

  4. Oracle SQL के साथ सामान्य सुविधाओं को साझा करने वाले व्यक्तियों को फ़्लैग करें

  5. Oracle में, क्या किसी दृश्य के माध्यम से किसी रिकॉर्ड को सम्मिलित करना या अद्यतन करना संभव है?