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

MySQL में एक स्ट्रिंग से उद्धरण और अल्पविराम निकालें

मेरा अनुमान यहां यह है कि क्योंकि डेटा आयात करने में सक्षम था कि फ़ील्ड वास्तव में एक वर्चर या कुछ वर्ण फ़ील्ड है, क्योंकि एक संख्यात्मक क्षेत्र में आयात करना विफल हो सकता है। यहाँ एक परीक्षण मामला था जिसे मैंने विशुद्ध रूप से एक MySQL, SQL समाधान चलाया था।

  1. तालिका केवल एक स्तंभ (अल्फ़ा) है जो एक वर्चर है।

    mysql> desc t;
    
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | alpha | varchar(15) | YES  |     | NULL    |       | 
    +-------+-------------+------+-----+---------+-------+
    
  2. एक रिकॉर्ड जोड़ें

    mysql> insert into t values('"1,000,000"');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t;
    
    +-------------+
    | alpha       |
    +-------------+
    | "1,000,000" | 
    +-------------+
    
  3. अपडेट स्टेटमेंट।

    mysql> update t set alpha = replace( replace(alpha, ',', ''), '"', '' );
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from t;
    
    +---------+
    | alpha   |
    +---------+
    | 1000000 | 
    +---------+
    

तो अंत में मैंने जो कथन इस्तेमाल किया वह था:

UPDATE table
   SET field_name = replace( replace(field_name, ',', ''), '"', '' );

मैंने MySQL Documentation को देखा और ऐसा नहीं लग रहा था कि मैं रेगुलर एक्सप्रेशन ढूंढ सकता हूं और प्रतिस्थापित कर सकता हूं . हालांकि आप को पसंद कर सकते हैं। एल्डिला , खोज के लिए रेगुलर एक्सप्रेशन का उपयोग करें और फिर प्रतिस्थापन के लिए वैकल्पिक समाधान का उपयोग करें।

s/"(\d+),(\d+)"/$1$2/ से भी सावधान रहें क्योंकि क्या होगा यदि संख्या अधिक है तो केवल एक अल्पविराम, उदाहरण के लिए "1,000,000" आप वैश्विक प्रतिस्थापन करना चाहते हैं (पर्ल में s///g है ) लेकिन वैश्विक प्रतिस्थापन के साथ भी प्रतिस्थापन शुरू होता है जहां आपने आखिरी बार छोड़ा था (जब तक कि पर्ल अलग न हो), और हर दूसरे अल्पविराम से अलग समूह को याद करेगा। एक संभावित समाधान यह होगा कि पहले (\d+) को वैकल्पिक बनाया जाए जैसे s/(\d+)?,(\d+)/$1$2/g और इस मामले में मुझे उद्धरणों को हटाने के लिए दूसरी खोज और प्रतिस्थापन की आवश्यकता होगी।

यहां केवल "1,000,000" स्ट्रिंग पर काम करने वाले नियमित अभिव्यक्तियों के कुछ रूबी उदाहरण दिए गए हैं, ध्यान दें कि स्ट्रिंग के अंदर कोई दोहरा उद्धरण नहीं है, यह केवल संख्या की एक स्ट्रिंग है।

>> "1,000,000".sub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"  
>> "1,000,000".gsub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"  
>> "1,000,000".gsub( /(\d+)?,(\d+)/, '\1\2' )
# => "1000000"  
>> "1,000,000".gsub( /[,"]/, '' )
# => "1000000"  
>> "1,000,000".gsub( /[^0-9]/, '' )
# => "1000000"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 टेबल में कैसे शामिल हों

  2. स्ट्रीम खोलने में विफल:ऐसी कोई फ़ाइल या निर्देशिका नहीं

  3. MySQL में प्रत्येक श्रेणी के लिए शीर्ष 10 रिकॉर्ड का चयन करें

  4. MySQL डेटाबेस इंजन क्या हैं?

  5. MySql कर्सर.execute () केवल एक पैरामीटर के साथ:एक स्ट्रिंग को सूची में क्यों काटा जाता है?