【问题标题】:MySQL move comma separated values from one column into anotherMySQL将逗号分隔的值从一列移动到另一列
【发布时间】:2015-01-06 23:38:50
【问题描述】:

大家晚上好;

我在 MySql 中有一个表,我想更新如下。仅供参考,我已经搜索了这个主题,但还没有找到解决方案。

MySQl 数据库中的表名为ALK_Results_NEWICD9 列中的数据包含用逗号分隔的数据。 我需要将第一组保留在ICD9 列中,例如第一行有 V57.9、246.9。 我需要将 V57.9 保留在 ICD9 列中,并将 246.9 移动到 ICD9_SECONDARY 列中。 如果一行超过 2,那么我需要将所有其他移动到 ICD9_OTHER 列(此列可以有多个 ICD9 代码,用逗号分隔)

总结第一组代码需要留在ICD9列,第二组代码需要移动到ICD9_SECONDARY。移动数据后,ICD9 列应该只有第一组代码。

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    假设表中已经存在两列,您可以使用update 更改数据:

    update alk_results_new
        set icd9_secondary = substr(icd9, instr(icd9, ',') + 1),
            icd9 = substring_index(icd9, ',', 1)
        where icd9 like '%,%';
    

    编辑:

    糟糕,我没有意识到有三列。方法类似,但稍微复杂一点,因为您需要考虑字符串的长度。我认为以下应该做你想要的:

    update alk_results_new
        set icd9_other = (case when icd9 like '%,%,%'
                               then substr(icd9, length(substring_index(icd9, ',', 2)) + 2)
                          end),
            icd9_secondary = (case when icd9 like '%,%'
                                   then substring_index(substring_index(icd9, ',', 2), ',', -1) 
                              end),
            icd9 = substring_index(icd9, ',', 1);
    

    注意:在运行 update 之前在 select 上测试逻辑。

    【讨论】:

    • 感谢您的回复,只是一个简单的问题,我看到您在哪里设置 icd9_secondary 和 icd9,但没有提及 ICD9_OTHER。我需要将第一组保留在 ICD9 列中,例如第一行有 V57.9 、246.9。我需要将 V57.9 保留在 ICD9 列中,并将 246.9 移动到 ICD9_SECONDARY 列中。如果一行超过 2,那么我需要将所有其他行移入 ICD9_OTHER 列(此列可以有多个 ICD9 代码,用逗号分隔)
    • 顺便说一句,几个月前我买了你的书,它很震撼!!!真的帮助我将 excel 技能提升到另一个层次
    • 嘿,我在使用 select 语句时收到此错误,有什么建议吗?您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SET ICD9_Other = 附近使用正确的语法(当 icd9 像 '%,%,%' 然后 SU' 在第 2 行时的情况
    • 在 MySQL 2010 Msg 8116, Level 16, State 1, Line 1 中也出现此错误 charindex 函数的参数 1 的参数数据类型 int 无效。
    • @FrankRivera:- 如果对您有帮助,您可以接受答案。 (单击时右刻度线变为绿色!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多