ओरेकल के वर्चर्स सॉर्ट ऑर्डर वर्कर तुलना के व्यवहार से मेल नहीं खाता है?
select * from (
select '000000000000' as x from dual
union
select '978123456789' as x from dual
union
select 'B002AACD0A' as x from dual
) /*where x>'000000000000'*/ order by x;
की तरह एक एसक्यूएल बयान पैदावार
B002AACD0A
000000000000
978123456789
कहां-प्रतिबंध uncommenting के बाद, परिणाम
B002AACD0A
978123456789
है मैं परिणाम की उम्मीद है सिर्फ 978123456789
B002AACD0A
के बाद होने की होगी प्रतिबंध के बिना क्वेरी चलाते समय 000000000000
से पहले वापस कर दिया गया है।
इस व्यवहार को कैसे समझाया जा सकता है? और मुझे वर्चर्स को क्रमबद्ध और तुलना करने के लिए कैसे किया जाता है ताकि वे एक साथ काम कर सकें जैसे कि मैं पूर्णांक के साथ कर सकता हूं?
संपादित करें: x>'B002AACD0A'
पर प्रतिबंध बदलने पर पर्याप्त मजेदार, परिणाम खाली है। इसे x>978123456789
पर बदलकर B002AACD0A
लौटाता है।
आईई। जब की तुलना:
B002AACD0A > 978123456789 > 000000000000
लेकिन जब
978123456789 > 000000000000 > B002AACD0A
संपादित 2 छँटाई: स्पष्ट रूप (order by NLSSORT(x,'NLS_SORT=BINARY_AI')
) बाइनरी तरह उपयोग करते हैं, परिणाम B002AACD0A>978123456789>000000000000
है और तुलना के व्यवहार से मेल खाता है। लेकिन मुझे अभी भी कोई संकेत नहीं है कि यह क्यों हो रहा है।
ओरेकल का कौन-सा संस्करण पर कर रहे हैं? मैं कुछ बहुत अलग देखता हूं ... मुझे 000000000000, 978123456789, बी 002 एएसीडी 0 ए पहली क्वेरी के साथ मिलता है, फिर 978123456789, बी 002 एएसीडी 0 ए जहां असम्बद्ध होता है। मेरा ver 10.2.0.3.0 है। – greghmerrill
मैं 10.2.0.4.0 का उपयोग कर रहा हूं। मैं इस तरह के व्यवहार को अलग करने के लिए आश्चर्यचकित नहीं हूं, शायद 'एनएलएस_SORT' सेटिंग से संबंधित है (मेरे मामले में, यह' जर्मनी 'है)। लेकिन वैसे भी, मैं एक ही प्रश्न के भीतर समान तरीके से व्यवहार करने की तुलना करता हूं और तुलना करता हूं ... –
9.2.0.7.0, 10.2.0.1.0, 11.2.0.1.0 और 11.1.0.6.0 (नहीं पूछें) सभी वापसी 000000000000, 978123456789, बी 002 एएसीडी 0 ए ... – Ben