SQL- स्ट्रिंग की खोज करते समय केस को अनदेखा करें


131


मेरे पास एक तालिका में निम्न डेटा है।
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound

SQL में मुझे एक क्वेरी लिखने की आवश्यकता है जो एक तालिका में स्ट्रिंग की खोज करती है। एक स्ट्रिंग की खोज करते समय इसे मामले को अनदेखा करना चाहिए। नीचे उल्लिखित SQL क्वेरी के लिए

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 

उपरोक्त सभी डेटा देता है, जबकि

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 

नहीं देता।

उदाहरण के लिए। जब मैं 'PriceOrder' या 'priceOrder' की खोज करता हूं तो यह काम करता है, लेकिन 'प्राइसऑर्डर' या 'Priceऑर्डर' काम नहीं करता है। मैंने नीचे दिए गए क्वेरी के साथ COLLATE का उपयोग करने की कोशिश की है, लेकिन यह काम नहीं कर रहा है। मुझे पता है जहाँ im गलत हो रहा है।

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'

जवाबों:


234

कुछ इस तरह का उपयोग करें -

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')

या

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')

14
मुझे लगता है कि आपको हमेशा सर्वोत्तम अभ्यास के रूप में स्ट्रिंग्स को कैपिटल (UPPER) की तुलना करनी चाहिए। Google "तुर्की मैं"
Traubenfuchs

2
यह जानने के लिए कि क्या आपके उत्तर में कॉलम वैल्यू UPPERया LOWERकेस LIKEको सर्च करने के लिए उपयोग करके कोई भी प्रदर्शन समस्या है ?
शाइजुत

वास्तव में आपको UPPER और LOWER दोनों प्रकारों की तुलना करनी होगी क्योंकि कुछ पात्रों के ऊपरी मामले में अलग-अलग अभ्यावेदन होते हैं लेकिन निचले मामले में समान प्रतिनिधित्व होता है। अन्य पात्रों के लिए, विपरीत सच हो सकता है। जावा ने जॉर्जियाई वर्णमाला का उल्लेख विशेष रूप से अपने मामले-असंवेदनशील तुलना में एक अतिरिक्त tolowerCase () करने के लिए किया है।
क्रुशा के। रुल

1
दुर्भाग्य से, यह दृष्टिकोण इस पोस्ट में वर्णित के रूप में एक पूर्ण तालिका स्कैन का कारण बनता है: alvinalexander.com/sql/… । एक अनुक्रमणिका खोज को लागू नहीं किया जा सकता है, क्योंकि फ़िल्टर किए गए कॉलम को UPPER / LOWER फ़ंक्शन द्वारा संशोधित किया गया है।
जेफ एस।

यदि ऊपरी / निचले के साथ क्वेरी प्रदर्शन पर्याप्त नहीं है, तो एक कोलाजेशन (इंडेक्स बनाने से पहले) सेट करना बेहतर तरीका है।
जेफ एस।

10

इस तरह के प्रश्न और केस असंवेदनशीलता के साथ खोज करने के लिए जवाब देखें - SQL सर्वर जहां एक मामले में अभिव्यक्ति को अनदेखा करता है

कुछ का उपयोग करके देखें:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'

यह काम नहीं करता है मैं कोलायत से पहले एसक्यूएल क्वेरी को ठीक से समाप्त नहीं करता हूं
शॉकवेव

@ मिगुएल-एफ .. यह ठीक काम कर रहा है, लेकिन यह सेलेक्ट डिस्टिक्ट COL_NAME से कैसे अलग है, कहां से COL_NAME LIKE '% priceorder%' पर है क्योंकि यह मेरे लिए भी ठीक काम कर रहा है ..
Jishhant

मैं इसके बजाय 'SQL_Latin1_General_Cp1_CI_AS_KI_WI' का उपयोग करने की सलाह दूंगा। यह एक खोज के लिए संवेदनशील नहीं है।
user8155123

9

इस प्रकार सं।

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'

Postgresql में।


4
यह प्रश्न sql-server टैग किया गया है, इसलिए उत्तर - उत्तर प्रासंगिक नहीं है।
लियाम

4

आपको शायद इस्तेमाल करना चाहिए SQL_Latin1_General_Cp1_CI_AS_KI_WI अपने टकराव के रूप में । आप अपने प्रश्न में जो निर्दिष्ट करते हैं, वह विस्फोटक रूप से संवेदनशील होता है।

आप यहां कोलाजेशन की एक सूची देख सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.