2011-07-13 11 views
5

हमारा ओरेकल डीबी यूटीएफ 8 है। हम ऐसे पते संग्रहित कर रहे हैं जिन्हें खोजने योग्य होने की आवश्यकता है। कुछ सड़क नामों में गैर-अंग्रेजी वर्ण होते हैं (उदाहरण के लिए पेना बैनाओ) को या तो "पेना बाइनो" या अंग्रेजी समकक्ष गुणों जैसे "पेना बैनो" के रूप में खोजने योग्य होने की आवश्यकता है। क्या हमने किया क्वेरी पर पाठ परिवर्तित करने के लिए है, कुछ की तरह:गैर-अंग्रेजी वर्णों के साथ ओरेकल खोज पाठ

SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual; 

लेकिन यहां मुद्दा यह है कि पात्रों के सभी नहीं एक अंग्रेजी बराबर (एन की तरह नहीं यहां तक ​​कि कुछ बहुत स्पष्ट वाले या ओ) तो हम अंत में पाठ के साथ करने के लिए परिवर्तित:

Pe?a Baina? 

उपयोगकर्ता कि addres टाइपिंग "पेना Bainao" उन्होंने नहीं मिल सकता है, क्योंकि "पेना Bainao" "" से अलग है खोजने की कोशिश करता तो अगर पे? एक बैन? ""।

हमने इस पर कुछ गंदे कामकाजों का पता लगाया है, लेकिन अगर किसी को और अधिक सुरुचिपूर्ण समाधान मिल गया है तो मैं पहले जांचना चाहता था।

Character  UTF8 Code  Possible Equivalent 
æ   - u00E6  -  ae 
å   - u00E5  -  a 
ã   - u00E3  -  a 
ñ   - u00F1  -  n 
õ   - u00F5  -  o 

उत्तर

5

1) BINARY_AI साथ nlssort (दोनों मामले और उच्चारण insentive) का उपयोग करना:

SQL> select nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') C from dual; 

C 
------------------------ 
70656E61206261696E616F00 

SQL> select nlssort('Pena Bainao', 'NLS_SORT = BINARY_AI') C from dual; 

C 
------------------------ 
70656E61206261696E616F00 

SQL> select nlssort('pena bainao', 'NLS_SORT = BINARY_AI') C from dual; 

C 
------------------------ 
70656E61206261696E616F00 

SQL> select 'true' T from dual where nlssort('pena bainao', 'NLS_SORT = BINARY_AI') = nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') ; 

T 
---- 
true 

2) आप कर सकते थे

यहाँ कुछ अक्षर हैं जो US7ASCII में बदला नहीं जाता की एक सूची है NLS_SORT सत्र चर को binary_ai में भी बदलें और फिर आपको हर बार NLS_SORT निर्दिष्ट नहीं करना होगा:

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ; 

no rows selected 

SQL> alter session set nls_sort = binary_ai; 

Session altered. 

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ; 

T 
---- 
true 

3) nlssort समारोह के उपयोग ड्रॉप और सब कुछ के sematics को बदलने के लिए, यह भी nls_comp सत्र चर सेट:

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ'; 

no rows selected 

SQL> alter session set nls_comp = linguistic; 

Session altered. 

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ'; 

T 
---- 
true 

विकल्प 1 परिवर्तन केवल स्थानीय व्यवहार, क्वेरी जहां अलग-अलग परिणाम चाहते हैं। विकल्प 2 और 3 अन्य प्रश्नों के व्यवहार को बदल देंगे और जो भी आप चाहते हैं वह नहीं हो सकता है। Oracle® Database Globalization Support Guide के Table 5-2 देखें। इंडेक्स का उपयोग करने में सक्षम होने के तरीके को देखने के लिए "Using Linguistic Indexes" अनुभाग भी देखें।

+0

भी SOUNDEX और अन्य समानता आधारित कार्यों पर विचार करें। – Randy

+2

'साउंडएक्स (' पेना बैनओ ')' यिलिड्स पी 515, 'साउंडएक्स (' पेना बाइनो ')' यिलिड्स पी 150। सत्र पैरामीटर NLS_SORT और NLS_COMP doe परिणामों को प्रभावित नहीं करते हैं। –

+0

@ शैनन सेवरेंस: ग्रेट, एल्टर सत्र सेट एनएलएस_Cओएमपी = भाषाई और वैकल्पिक सत्र सेट एनएलएस_SORT = BINARY_AI ने चाल भी नहीं की लेकिन उन्होंने क्वेरी की जटिलता को काफी कम कर दिया। आपका बहुत बहुत धन्यवाद! – Chepech

संबंधित मुद्दे