मेरा अनुमान यहां यह है कि क्योंकि डेटा आयात करने में सक्षम था कि फ़ील्ड वास्तव में एक वर्चर या कुछ वर्ण फ़ील्ड है, क्योंकि एक संख्यात्मक क्षेत्र में आयात करना विफल हो सकता है। यहाँ एक परीक्षण मामला था जिसे मैंने विशुद्ध रूप से एक MySQL, SQL समाधान चलाया था।
-
तालिका केवल एक स्तंभ (अल्फ़ा) है जो एक वर्चर है।
mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | alpha | varchar(15) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
-
एक रिकॉर्ड जोड़ें
mysql> insert into t values('"1,000,000"'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +-------------+ | alpha | +-------------+ | "1,000,000" | +-------------+
-
अपडेट स्टेटमेंट।
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"