我是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'
答案 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'
在这里演示:
答案 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%'