2015-12-15 9 views
6

शुभ दिनयह regexp क्वेरी क्यों कोई परिणाम नहीं लौट रही है?

मैं एक क्षेत्र मैं खोजने की जरूरत है कि पंक्तियों की तरह

BBB-888-8557ZZV-003.XYZ 
BBB-999-8787ZZV-00D.XYZ 

देख है सभी रिकॉर्ड है कि रेगुलर एक्सप्रेशन से मेल (और की जगह मैं इस बात की पुष्टि करने के बाद अपने चयन रिटर्न सही पंक्तियों :) कि) :

/-\d\d[A-Z]/g 

इसलिए उन सभी फ़ील्ड जिनमें शून्य चिह्न है, उसके बाद दो अंकों के बाद वर्णमाला पत्र होता है।

मुझे केवल उन फ़ील्ड को फ़िल्टर करने की आवश्यकता है जिनमें 999 हैं।

मैं निम्नलिखित एसक्यूएल की कोशिश की, लेकिन यह कोई परिणाम:

SELECT * 
FROM `track` 
WHERE (
pod LIKE "BBB-999%" 
AND pod 
REGEXP '/-\d\d[A-Z]/g' 
) 

इसके अलावा, एक त्वरित क्यों इन सभी क्षेत्रों को बदलने के लिए किया जाएगा कि क्या एक बार वे पाए जाते हैं:

BBB-999-8787ZZV-_MARK_D.XYZ 
+1

मैं तुम्हें एक समाधान दे दिया है के तार के साथ सामना कर सकते हैं जो मनमाने ढंग से लंबाई। अगर आपको मौका मिलता है तो कृपया देखें, धन्यवाद। –

उत्तर

3

नंबर:

SQLFiddle

आप वास्तव में pod स्तंभ में मानों को बदलने चाहते हैं तो आप एक UPDATE कोशिश कर सकते हैं [0-9] or [[:digit:]]
\d जैसा कि आप उम्मीद करते हैं, उतना काम नहीं करेंगे।link

कोशिश करें;

SELECT * 
FROM `track` 
WHERE 
pod LIKE "BBB-999%" and 
pod REGEXP '\-[0-9]{2}[A-Z]{1}' 

या

SELECT * 
FROM `track` 
WHERE 
pod LIKE "BBB-999%" and 
pod REGEXP '\-[[:digit:]]{2}[A-Z]{1}' 

sql fiddle demo

अद्यतन क्षेत्र -MARK[A_Z].XYZ

  1. साथ -00[A-Z].XYZ होने तब strin की लंबाई ग्राम (टिप्पणी से)
  2. पिछले 8 अक्षर अलग है या तो \-[0-9]{3}.XYZ या \-[0-9]{2}[A-Z]{1}.XYZ

कोशिश हो सकता है:

UPDATE `track` 
SET `pod` = concat(reverse(substr(reverse(`pod`) from 8)), 'MARK', substr(`pod` from -5)) 
WHERE 
`pod` LIKE "BBB-999%" and 
`pod` REGEXP '\-0{2}[A-Z]{1}'; 

sql fiddle demo

+0

धन्यवाद प्रवीण, यह 100% काम करता है अब मैं तालिका में _MARK_ [ए-जेड] के साथ सभी 00 [ए-जेड] मैचों को कैसे बदल सकता हूं? – georgelappies

+0

'pod' मान' xxx-xxx-xxxxxxx-xxx.xxx' पैटर्न के साथ लम्बाई डेटा तय है ?? – Praveen

+0

हाय प्रवीण, नहीं, यह नहीं है। यह हमेशा बीबीबी-999 के साथ शुरू होगा- और उसके बाद संख्याओं और अक्षरों का संयोजन होगा जिसके बाद '\ - [0-9] {3}' या '\ - [0-9] {2} [AZ] {1 } 'के बाद .XYZ मुझे उन सभी 00 को प्रतिस्थापित करने की आवश्यकता है जिन्हें आपके regexp को _MARK_ के साथ मिलती है आशा है कि यह समझ में आता है :) – georgelappies

3

आप अपनी क्वेरी के साथ प्रतिबंधित करने के बाद आउटपुट में प्रतिस्थापन प्राप्त करने के लिए CONCAT() फ़ंक्शन का उपयोग कर सकते हैं।

SELECT CONCAT(SUBSTRING(pod, 1, LENGTH(pod) - LOCATE('-', REVERSE(pod)) + 1), 
       '_MARK_D.XYZ') 
FROM `track` 
WHERE 
(
    pod LIKE "BBB-999%" 
    AND pod REGEXP '-[0-9][0-9][A-Z]' 
) 

किसी कारण के लिए, मैं MySQL regex में [0-9] उपयोग करने के लिए यह काम करने के लिए मिल की जरूरत है।

एक चल डेमो के लिए नीचे दिए गए लिंक पर क्लिक करें: mysql shouls में

UPDATE `track` 
SET pod = CONCAT(SUBSTRING(pod, 1, LENGTH(pod) - LOCATE('-', REVERSE(pod)) + 1), 
       '_MARK_D.XYZ') 
WHERE 
(
    pod LIKE "BBB-999%" 
    AND pod REGEXP '-[0-9][0-9][A-Z]' 
) 
+1

मुझे अब यह काम मिल गया है। यह चाल नियमित अभिव्यक्ति में किसी भी संख्या का प्रतिनिधित्व करने के लिए '[0-9]' का उपयोग करना है। स्वयं को दृढ़ करने के लिए कृपया SQL Fiddle को आज़माएं। –

+0

हाय @ टाइम-बिजीलेसेन, धन्यवाद, यह अब काम कर रहा है, मैं वास्तविक तालिका के अंदर चयन द्वारा प्राप्त मूल्यों को कैसे प्रतिस्थापित कर सकता हूं और न केवल आउटपुट में प्रदर्शित किया है? – georgelappies

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