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


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.