sql从字段中删除点和逗号

时间:2015-12-31 07:17:45

标签: mysql sql

在mysql中我可以列出我的meta_key _simple_fields_fieldGroupID_6_fieldID_10_numInSet_0的所有meta_values

 select * from pm_postmeta where meta_key LIKE '%_simple_fields_fieldGroupID_6_fieldID_10_numInSet_0%'

其用户高度列表,如1.67,168等

我想删除数字上的点...有时候我有1.79而我想要179 ...我怎么能这样做?

我试过

UPDATE pm_postmeta
SET meta_value = REPLACE(REPLACE(meta_value,',00',''),'.','')
WHERE meta_key='_simple_fields_fieldGroupID_6_fieldID_10_numInSet_0';

但它删除了表格行,我需要再次导入...

4 个答案:

答案 0 :(得分:1)

如果meta_value是整数,则将meta_value列更新为字符串

ALTER TABLE pm_postmeta ALTER COLUMN meta_value varchar(50);

UPDATE pm_postmeta SET meta_value = REPLACE(REPLACE(meta_value,',00',''),'.','')
WHERE meta_key='_simple_fields_fieldGroupID_6_fieldID_10_numInSet_0';

答案 1 :(得分:1)

SELECT p.*,REPLACE(REPLACE(p.`meta_value`, '00', ''),'.', '') AS meta_value
FROM `pm_postmeta` p
WHERE p.`meta_key`='_simple_fields_fieldGroupID_6_fieldID_10_numInSet_0';

答案 2 :(得分:1)

实际上每个都取决于您用来存储人员高度的数据类型。

你说“它们是数字”并且我认为它们存储在NUMERIC列中(你不能将1.78存储到INTEGER数据类型中)。

因此,假设您的原始表包含以下内容:

SQL> select * from people ;
        id|  height
----------+--------
         1|  180.00
         2|    1.78
         3|  165.00
         4|    2.01

你基本上想要用一个小数部分更新这个表乘以100所有高度:

SQL> update people set height = height * 100 where mod(height, 1) > 0 ;
SQL> select * from people ;
        id|  height
----------+--------
         1|  180.00
         2|  178.00
         3|  165.00
         4|  201.00

修改

好的,您现在说要更改的值包含 逗号或点,因此...列是CHAR / VARCHAR。像这样:

SQL> select * from people2;
        id|height    
----------+----------
         1|180       
         2|1.78      
         3|165       
         4|2,01      

在这种情况下,我会使用:

SQL> update people2 set height = replace(replace(height,'.',''),',','') where height regexp '.*[,.].*';
SQL> select * from people2;
        id|height    
----------+----------
         1|180       
         2|178       
         3|165       
         4|201       

答案 3 :(得分:1)

我不确定您的REPLACE(REPLACE是否正确,但您的UPDATE声明的WHERE条件是错误的。您使用=代替LIKE。使用LIKE

UPDATE pm_postmeta
SET meta_value = REPLACE(REPLACE(meta_value,',00',''),'.','')
WHERE meta_key LIKE '%_simple_fields_fieldGroupID_6_fieldID_10_numInSet_0%';