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

किसी फ़ील्ड से सभी गैर-संख्यात्मक वर्ण हटाएं

कोई भी "बिल्टिन" फ़ंक्शन नहीं है जो MySQL में इस ऑपरेशन को करेगा।

एक विकल्प यह है कि आप अपना स्वयं का संग्रहित फ़ंक्शन बनाएं (यदि आपके पास डेटाबेस पर पर्याप्त विशेषाधिकार हैं)।

 DELIMITER $$

 DROP FUNCTION IF EXISTS `uf_only_digits`$$

 CREATE FUNCTION `uf_only_digits`(as_val VARCHAR(65535))
 RETURNS VARCHAR(65535)
 DETERMINISTIC
 BEGIN
   DECLARE retval VARCHAR(65535);
   DECLARE i INT;
   DECLARE strlen INT;
   -- shortcut exit for special cases
   IF as_val IS NULL OR as_val = '' THEN
     RETURN as_val;
   END IF;
   -- initialize for loop
   SET retval = '';
   SET i = 1;
   SET strlen = CHAR_LENGTH(as_val);
 do_loop:
   LOOP
     IF i > strlen THEN
       LEAVE do_loop;
     END IF;
     IF SUBSTR(as_val,i,1) IN ('0','1','2','3','4','5','6','7','8','9') THEN
       SET retval = CONCAT(retval,SUBSTR(as_val,i,1));
     END IF;
     SET i = i + 1;
   END LOOP do_loop;
   RETURN retval;
 END$$

 DELIMITER ;

और परीक्षण करना सुनिश्चित करें इससे पहले कि आप इसे एक अद्यतन विवरण का उपयोग करें।

 SELECT t.foo
      , uf_only_digits(t.foo)
   FROM ( SELECT '' AS foo
          UNION ALL SELECT ' x'
          UNION ALL SELECT 'a1b2'
          UNION ALL SELECT '1-888-555-1212 ext 213'
          UNION ALL SELECT '1-800-FLOWERS'
        ) t

रिटर्न:

 foo                     uf_only_digits(t.foo)  newlen  
 ----------------------  ---------------------  --------
                                                       0
  x                                                    0
 a1b2                    12                            2
 1-888-555-1212 ext 213  18885551212213               14
 1-800-FLOWERS           1800                          4

(अंतिम दो पंक्तियाँ हमें इस बात पर पुनर्विचार करने के लिए विराम दे सकती हैं कि हम वास्तव में क्या हासिल करना चाहते हैं। अगर यह मैं होता, तो मैं एक नया कॉलम बनाता, और इसमें मौजूदा मूल्य को सहेजता, इससे पहले कि मैं एक अद्यतन करता।)

 -- new column same size as `phone` column
 ALTER TABLE mytable ADD COLUMN orig_phone VARCHAR(40) NULL 
   COMMENT 'original phone value, before update to all digits';

 UPDATE mytable t
    SET t.orig_phone = t.phone ;

 UPDATE mytable t
    SET t.phone = uf_only_digits(t.phone) ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कनेक्ट नहीं हो सका:'प्रारंभिक संचार पैकेट पढ़ने' पर MySQL सर्वर से कनेक्शन टूट गया, सिस्टम त्रुटि:0

  2. फ्रेंच लहजे के साथ json_encode सरणी कैसे करें?

  3. MySQL:डेटाबेस छोड़ने में त्रुटि (त्रुटि 13; त्रुटि 17; त्रुटि 39)

  4. Mysql में दो उपयोगकर्ता के संचार के बीच नवीनतम संदेश का चयन करें

  5. एक SIMILAR स्ट्रिंग को खोजने और बदलने के लिए preg_match के साथ RegEx