Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या MySQL में कॉलम से नियमित अभिव्यक्ति से मेल खाने वाले टेक्स्ट को निकालने का कोई तरीका है?

यह MySQL रेगेक्स क्षमताओं के साथ सकारात्मक नहीं है (जब तक कि कुछ udf स्थापित नहीं किया जाता है जो इसके लिए डिज़ाइन किए गए प्रतीत होते हैं)। तकनीकी रूप से, जैसा कि [0-9] एक सीमित सेट है, आप 10 LOCATE . को फेंक सकते हैं LEAST में है (दिनांक 0 के लिए देखें और अमान्य करें), और SUBSTRING . का उपयोग करें . सुंदर तस्वीर नहीं:

SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,
  LEAST(
    IF(LOCATE(0,@var)=0,LENGTH(@var),LOCATE(0,@var)),
    IF(LOCATE(1,@var)=0,LENGTH(@var),LOCATE(1,@var)),
    IF(LOCATE(2,@var)=0,LENGTH(@var),LOCATE(2,@var)),
    IF(LOCATE(3,@var)=0,LENGTH(@var),LOCATE(3,@var)),
    IF(LOCATE(4,@var)=0,LENGTH(@var),LOCATE(4,@var)),
    IF(LOCATE(5,@var)=0,LENGTH(@var),LOCATE(5,@var)),
    IF(LOCATE(6,@var)=0,LENGTH(@var),LOCATE(6,@var)),
    IF(LOCATE(7,@var)=0,LENGTH(@var),LOCATE(7,@var)),
    IF(LOCATE(8,@var)=0,LENGTH(@var),LOCATE(8,@var)),
    IF(LOCATE(9,@var)=0,LENGTH(@var),LOCATE(9,@var))
   ) -1 ) as 'result';
+---------+
| result  |
+---------+
| asjdasd | 
+---------+

अगर आपको जरूरत यह यूडीएफ को देखता है। अन्यथा आप फ़ील्ड को लाने और इसे MySQL के बाहर हेरफेर करने के लिए बेहतर हैं।

संपादित करें:यदि संख्या एक पूर्णांक में फिट होती है , गंदी हैकरी का परिणाम हो सकता है :

SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,LENGTH(@var)-LENGTH(CAST(REVERSE(@var) as UNSIGNED)));
+---------+
| result  |
+---------+
| asjdasd |
+---------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कई-से-एक संबंध पर DELETE ON CASCADE का उपयोग कैसे करें

  2. PHP का उपयोग करके स्थानीय पीसी में ओडीबीसी डेटा स्रोत की सूची प्राप्त करें

  3. हाइबरनेट के साथ स्प्रिंग बूट:कॉलम के साथ ऑटो-जनरेटिंग डेटाबेस स्कीमा जिसमें सेकंड के अंश हो सकते हैं

  4. नेस्टेड सेट मॉडल पीएचपी पुस्तकालय

  5. रूबी ऑन रेल्स MySQL #08S01खराब हैंडशेक - MySQL को डाउनग्रेड करें?