mysql - 从 MySQL 中的字符串中删除引号和逗号

标签 mysql regex string

我正在从 CSV 文件导入一些数据,大于 1000 的数字会变成 1,100 等。

从中删除引号和逗号以便将其放入 int 字段中的好方法是什么?

编辑:

数据实际上已经在 MySQL 表中,所以我需要能够使用 SQL 来实现。抱歉弄错了。

最佳答案

我的猜测是因为数据能够导入该字段实际上是一个 varchar 或一些字符字段,因为导入到数字字段可能会失败。这是我运行纯 MySQL、SQL 解决方案的测试用例。

  1. 该表只是一个单独的列 (alpha),它是一个 varchar。

    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而且看起来我无法使用正则表达式查找并替换。虽然你可以,比如 Eldila ,使用正则表达式进行查找,然后使用替代解决方案进行替换。


还要小心 s/"(\d+),(\d+)"/$1$2/ 因为如果数字多于一个逗号,例如 "1,000,000"你将要进行全局替换(在 perl 中是 s///g)。但即使使用全局替换,替换也会从您上次停止的地方开始(除非 perl 不同),并且会错过所有其他逗号分隔的组。一个可能的解决方案是使第一个 (\d+) 像这样 s/(\d+)?,(\d+)/$1$2/g 是可选的,在这种情况下我需要第二个 find并替换以去除引号。

这里有一些仅作用于字符串“1,000,000”的正则表达式的 ruby​​ 示例,注意字符串中没有双引号,这只是数字本身的字符串。

>> "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"

关于mysql - 从 MySQL 中的字符串中删除引号和逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917/

相关文章:

php - Codeigniter - 显示有条件的数字

regex - 试图理解这个正则表达式的含义

C# - Regex.Replace - 无法弄清楚为什么换行符没有被替换

java - 如何从 Java 中的给定字符串中提取日期

c++ - 高效的 const char* 连接和输出到 std::string

mysql - 按逗号分隔列表的特定索引排序

sql - 列中什么时候为空值 "safe"?

php - Laravel Join 只选择一个匹配项

java - 结合 hashCode() 和 equals() 更快?

javascript - 如果字符串的第一个字符为 0,则删除它