क्यों "_" (अंडरस्कोर) मैच "-" (हाइफ़न) करता है?


110

मुझे इस क्वेरी का उपयोग करते हुए एक पीडीएफ मैनुअल की तलाश करनी है:

root@localhost:test> select * from a where name like '%taz_manual%.pdf%';
+--------------------+------------------+-------------+
| name               | description      |        size | 
+--------------------+------------------+-------------+
| taz-manual-1.1.pdf | Manual v1.0 TA-Z |    31351902 |
| taz-manual-0.2.pdf | Manual v1.0 T1-A |     3578278 |
| taz_manual-2.0.pdf | Manual v2.0 GA-X |   542578278 |
etc........
+--------------------+------------------+-------------+
132 row in set (0.00 sec)

जब मैं नाम निर्दिष्ट करता हूं तो मैं डैश के साथ क्यों देख रहा हूं taz_manual%.pdf?

जवाबों:


231

क्योंकि अंडरस्कोर _प्रतिशत की तरह एक वाइल्डकार्ड है %, सिवाय इसके कि यह केवल एक चरित्र की तलाश करता है।

एसक्यूएल पैटर्न मिलान आपको किसी भी वर्ण से मेल खाने के लिए "_" का उपयोग करने में सक्षम बनाता है और वर्णों की मनमानी संख्या (शून्य वर्णों सहित) से मिलान करने के लिए "%" है।

(खंड 3.3.4.7 से। माईएसक्यूएल प्रलेखन में पैटर्न मिलान ।)

यदि आप अंडरस्कोर का उपयोग likeशाब्दिक के रूप में करना चाहते हैं , तो आपको इससे बचना होगा:

select * from a where name like '%taz\_manual%.pdf%';

afaik यह केवल तभी प्रासंगिक है जब आप पैटर्न के संदर्भ में होते हैं। एक LIKEबयान के अंदर की तरह । जब सभी जगह _एक साथ -: UPDATE sys_file set identifier = REPLACE(identifier, '_', '-') WHERE identifier LIKE '%\_%';। अंदर भागने LIKEऔर अंदर भागने की सूचना दें REPLACE। (मुझे यह अजीब लगता है कि आप एक पैटर्न के संदर्भ में अंदर की जगह नहीं ले रहे हैं ...)
— हफेनक्रानिक

@ हफेनक्रेन से @Hafenkranich: "LIKE या NOT LIKE तुलना ऑपरेटरों का उपयोग
— करें

2

सटीक मिलान के साथ तार मिलान करते समय मेरे पास अंतरिक्ष और हाइफ़न के साथ एक समान मुद्दा था:

SELECT id FROM location WHERE name = 'IND - HQ';

उपरोक्त क्वेरी ने MySQL में कोई रिकॉर्ड वापस नहीं किया। मुझे रिक्त स्थान और हाइफ़न से बचना था और LIKEसटीक मिलान के बजाय बराबर (=) का उपयोग करना था:

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';

क्या आप सुनिश्चित हैं कि यह संबंधित है? शायद इस सटीक नाम के साथ कोई स्थान पंक्ति नहीं थी ... ???
— निको हसे

हाँ, स्थान के साथ पंक्तियाँ थीं = 'IND - HQ' और ऊपर दी गई समस्या को ठीक किया
— NBhat

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