Mysql更新列替换部分文本

时间:2017-01-20 04:50:04

标签: mysql sql replace

我是sql的新手,我在执行以下任务时遇到了一些麻烦: 我有一个包含表示数字的文本值的列。这些数字的比例是不同的,因此有些是数千(例如32.11k)而有些是数百万(例如5.40M)。我想将它们转换成数千个数字,这样32.11k就会变成32.11,5.40M会变成5400.

我认为这可能适用于成千上万,但事实并非如此。

UPDATE table_name
SET column_name = REPLACE(column_name, 'k', '')

我还尝试了以下通配符(数百万),但我想我一定做错了。

UPDATE table_name SET column_name = REPLACE(column_name,'.%M','.%')
WHERE column_name LIKE '%.%M'

2 个答案:

答案 0 :(得分:2)

您可以尝试以下UPDATE查询:

UPDATE yourTable
SET col = CAST(CASE WHEN col LIKE '%k' THEN CAST(REPLACE(col, 'k', '') AS DECIMAL(10,2))
                    WHEN col LIKE '%M'
                    THEN ROUND(1000*CAST(REPLACE(col, 'M', '') AS DECIMAL(10,2)), 2)
               END AS CHAR)
WHERE col LIKE '%k' OR col LIKE '%M'

在这里演示:

SQLFiddle

答案 1 :(得分:1)

您的k更新看起来应该有效,您可以在一个CASE表达式中执行这些更新:

UPDATE table_name
SET column_name = CASE WHEN column_name LIKE '%k%' THEN REPLACE(column_name, 'k', '') 
                       WHEN column_name LIKE '%M%' THEN REPLACE(column_name,'M','')*1000 
                  END
WHERE column_name LIKE '%k%' OR column_name LIKE '%M%'