我在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表中执行此操作?
答案 0 :(得分:1)
您可以添加如下列:
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语句做一些易于理解的东西,并且很容易解释它正在做什么。
答案 1 :(得分:0)
使用InStr()在你的字符串中找到“ - ”并使用SUBSTRING(str,pos,len)来获得开始&结束号码。然后使用Between子句来构建Case子句。
希望这有助于构建您的解决方案。
由于