我在MySQL表中有一个列,它将“混乱”的数据存储为文本,如下所示:
**SIZE**
2
2-5
6-25
2-10
26-100
48
50
我想要创建一个新的列"RevTextSize“,它将该列中的数据重写到一个预定义的值范围。
If Size=2, then "RevTextSize"= "1-5"
If Size=2-5, then "RevTextSize"= "1-5"
If Size=6-25, then "RevTextSize"="6-25"
...
这在Excel、SPSS和其他类似工具中很容易做到,但是如何在MySQL表中做到呢?
发布于 2016-04-08 05:04:53
您可以添加如下列:
ALTER TABLE messy_data ADD revtextsize VARCHAR(30);
若要填充该列:
UPDATE messy_data
SET revtextsize
= CASE
WHEN size = '2' THEN '1-5'
WHEN size = '2-5' THEN '1-5'
WHEN size = '6-25' THEN '6-25'
ELSE size
END
这是一种蛮力的方法,识别size
的每个不同值并指定替换值.
您可以使用另一个SQL语句来帮助您构建CASE表达式。
SELECT CONCAT(' WHEN size = ''',d.size,''' THEN ''',d.size,'''') AS stmt
FROM messy_data d
GROUP BY d.size
将结果保存到您最喜欢的SQL文本编辑器中,然后黑掉替换值。这将加快为设置revtextsize列(第一条语句)而运行的语句创建CASE表达式的速度。
如果您想要构建“更智能”的东西,动态地评估大小的内容并做出明智的选择,那就需要更多的参与。如果要这样做,我会在第二条语句中这样做,生成CASE表达式。在运行update语句之前,我更希望对其进行检查。我更喜欢让update语句做一些易于理解和易于解释的事情。
发布于 2016-04-08 04:22:46
使用InStr()定位字符串中的"-“,并使用SUBSTRING(str、pos、len)获取开始和结束号。然后使用中间子句来构建Case子句。
希望这将有助于建立您的解决方案。
谢谢
https://stackoverflow.com/questions/36490980
复制相似问题