2013-06-30 4 views
7

से पहले सभी वर्ण प्राप्त करें मेरे पास एक सारणी है जहां मैं कुछ मान निकालता हूं, एक कॉलम मानों में "value1 | value2 | value3" हो सकता है, लेकिन मैं केवल वर्णों को पहले प्राप्त करना चाहता हूं। - "मूल्य 1"।MySQL विशिष्ट वर्ण

यही मैंने कोशिश की, लेकिन यह काम नहीं करता .. मैं क्या गलत कर रहा हूं? धन्यवाद!

$ एसक्यूएल = "का चयन करें * वाम ('की तरह', (ढूँढें '|', 'की तरह') - 1) $ tablename से कहां Parent = '0' और प्रकार की तरह 'शीर्ष' Order द्वारा आदेश एएससी ";

मैं सभी मूल्यों, न सिर्फ एक क्षेत्र के लिए इसका उपयोग करना चाहते हैं ..

उत्तर

10

आप निम्नलिखित बयान की जरूरत है [ColName] के उस भाग प्राप्त करने के लिए:

LEFT([ColName],INSTR([ColName],"|")-1) 

आप चाहते हैं सभी निम्नलिखित की तरह कुछ के साथ आप कर सकते हैं संघ एक ही recordset स्तंभ में एकाधिक स्तंभों का चयन करें:

SELECT LEFT(ColName,INSTR(ColName,"|")-1) AS FirstValue From $TableName; 
UNION ALL 
SELECT LEFT(ColName2,INSTR(ColName2,"|")-1) AS FirstValue From $TableName; 

यदि आप चाहते हैं एकाधिक स्तंभों पर इसका उपयोग करने के लिए, एसक्यूएल के निर्माण को स्क्रिप्ट करें।

5

दो बातें: (1) आप के बीच अपने * और अभिव्यक्ति आप LEFT और (2) आप उद्धरण में like डाल रहे हैं के साथ क्या करने की कोशिश कर रहे हैं, ताकि कार्यों पर काम कर रहे एक अल्पविराम की जरूरत नहीं है like नामक आपके कॉलम के बजाय निरंतर मान like। बैकटिक्स में like डालने का प्रयास करें।

SELECT *, LEFT(`Like`, LOCATE('|', `Like`)-1) 
... 

आप भी इस के लिए MySQL SUBSTRING_INDEX फ़ंक्शन का उपयोग कर सकते हैं:

SELECT *, SUBSTRING_INDEX(`Like`, '|', 1) 
... 
+0

धन्यवाद, SUBSTRING_INDEX समाधान की तरह अधिक – zhihong

0

मुझे लगता है कि वहाँ एक आसान तरीका है:

strSplit(ColName,'|',1) 

मैं सही हूँ?

संबंधित मुद्दे