MySQL में स्पेस से पहले सभी वर्ण प्राप्त करें


81

मैं एक जगह से पहले सभी पात्रों को एक क्षेत्र में लाना चाहता हूं

उदाहरण के लिए, यदि field1है"chara ters"

मैं चाहता हूं कि यह वापस लौटे "chara"

यह चुनिंदा कथन कैसा दिखेगा?

जवाबों:


116

SELECT LEFT(field1,LOCATE(' ',field1) - 1)

ध्यान दें कि यदि प्रश्न में स्ट्रिंग में रिक्त स्थान नहीं है, तो यह एक रिक्त स्ट्रिंग लौटाएगा।


6
यह पीछे की जगह के साथ 'चर' लौटाता है। यदि आपको अंत में विभाजक की आवश्यकता नहीं है तो आपको LOCATE का परिणाम घटाना होगा: SELECT LEFT (field1, LOCATE ('', field1) - 1)
Enyby

1
यदि आपके मुख्य क्षेत्र में स्थान नहीं है तो यह काम नहीं करेगा। सबस्ट्रिंग पूरे स्ट्रिंग को वापस करने के बजाय खाली मान लौटाएगा। उदाहरण के लिए यदि मेरे क्षेत्र में स्ट्रिंग "परीक्षण-संभव-गलत-नाम" है, तो विकल्प "परीक्षण-संभव-गलत-नाम" के बजाय कुछ भी नहीं लौटाएगा।
स्वप्निल गंगराड़े

2
@ स्वप्निलगंग्रेड वास्तविक उपयोग के मामले पर निर्भर करता है कि यह अपेक्षित व्यवहार हो सकता है या नहीं। कोई यह तर्क दे सकता है कि यदि स्ट्रिंग में कोई स्थान नहीं है, तो अंतरिक्ष से पहले कोई वर्ण नहीं हैं, और इसलिए एक खाली स्ट्रिंग को लौटाया जाना चाहिए। एक अन्य व्यक्ति इस तरह के मामले में एक पूरी स्ट्रिंग लौटा सकता है। यह प्रश्न निर्दिष्ट नहीं करता है कि इस किनारे के मामले में फ़ंक्शन को कैसे व्यवहार करना चाहिए। मैं इसे उजागर करने के लिए उत्तर को अपडेट करूंगा।
मचल

11
तब select SUBSTRING_INDEX( field1, ' ', 1 ) from table;पसंद करता है, तो हम एक पूरी स्ट्रिंग करवाना है, तो वहाँ कोई जगह नहीं चाहते हो जाएगा।
स्वप्निल गैंग्रेड

2
नीचे दिए गए उत्तर ( SUBSTRING_INDEX) एक सामान्य समाधान के रूप में "बेहतर" है क्योंकि यह उन मानों को बनाए रखेगा जिनमें सीमांकक शामिल नहीं है, जिसके परिणामस्वरूप रिक्त मान है।
पतित

88

नीचे एक और तरीका है जो काम करता है और कुछ को थोड़ा सरल लग सकता है। यह SUBSTRING_INDEX MySQL फ़ंक्शन का उपयोग करता है । 1 पहले स्थान से पहले सब कुछ देता है, और -1 अंतिम स्थान के बाद सब कुछ लौटाता है।

यह 'चर' देता है:

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

यह 'ters' देता है:

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

विवरण

एक सकारात्मक मान स्ट्रिंग की शुरुआत से आपके निर्दिष्ट चरित्र के लिए दिखेगा, और एक नकारात्मक मूल्य स्ट्रिंग के अंत से शुरू होगा। संख्या का मूल्य स्ट्रिंग के शेष टुकड़े को वापस करने से पहले देखने के लिए आपके निर्दिष्ट चरित्र की मात्रा को इंगित करता है। यदि आपके द्वारा खोजा जा रहा वर्ण मौजूद नहीं है, तो संपूर्ण फ़ील्ड मान वापस कर दिया जाएगा।

इस स्थिति में, -2 दूसरे से अंतिम स्थान के दाईं ओर सब कुछ लौटा देगा, जो इस उदाहरण में मौजूद नहीं है, इसलिए संपूर्ण फ़ील्ड मान वापस कर दिया जाएगा।


3
यह भी काम करता है, अगर तार हैं, तो बिना रिक्त, उदाहरण के लिए 'चर' भी काम करेगा।
बर्नहार्ड

2
यह xyz घटकों के साथ एक संस्करण स्ट्रिंग के प्रमुख + लघु संस्करण को प्राप्त करने में बहुत काम आया।
थोमथोम

4
यह सबसे अच्छा काम करता है जब आप चाहते हैं कि यदि चरित्र नहीं मिला तो पूरा क्षेत्र वापस आ जाए।
Stephentgrammer

मैं भू-निर्देशांक को एक स्ट्रिंग फ़ील्ड से निकालने के लिए इसका उपयोग करता हूं जहां एक सीमांकक (अल्पविराम) को मौजूद होने के लिए निर्देशित किया जाता है।
ob-ivan

11

आपको उसके लिए कुछ स्ट्रिंग ऑपरेशन की आवश्यकता होगी । हर क्षेत्र को मानते हुए कम से कम एक अंतरिक्ष वर्ण है:

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;

सुरक्षित दृष्टिकोण:

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;

सुरक्षित संस्करण के लिए +1, हालांकि यह स्पष्ट नहीं है कि जब फ़ील्ड रिक्त नहीं होती है तो क्या परिणाम वापस किया जाना चाहिए।
मचल अगल

2
1 के लिए 0 बदलना था:SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
लुलिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.