替换MYSQL上逗号分隔结果的数字

时间:2016-06-30 11:05:16

标签: mysql string comma

我有这个问题:

PCName[1]: ebinissac
PCName[2]: ebinissac1
PCName[3]: sithu
PCName[4]: 

这给出了结果:

enter image description here

任何机会,有没有办法让我产生结果,改变那里的数字以缩短月份名称?使用图像,所需的结果将是:

SELECT delMonth FROM futRoot

我知道这段代码可以缩短月份:

Mar,Jun,Sept,Dec
Feb,Apr,Jun,Aug,Oct,Dec 
Feb,Apr,Jun,Aug,Oct,Dec
Feb,Apr,Jun,Aug,Oct,Dec
Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec

我的问题是如何从字符串中获取monthNumber,然后在将它们转换为缩短的月份之后以某种方式对它们进行CONCAT。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

这是一个hackish解决方案,但它可以工作,它只是清晰可辨,因为你只有十二个可能的值。

SELECT TRIM(TRAILING ',' FROM CONCAT(
    CASE WHEN FIND_IN_SET(1, delMonth) THEN 'Jan,' ELSE '' END,
    CASE WHEN FIND_IN_SET(2, delMonth) THEN 'Feb,' ELSE '' END,
    CASE WHEN FIND_IN_SET(3, delMonth) THEN 'Mar,' ELSE '' END,
    CASE WHEN FIND_IN_SET(4, delMonth) THEN 'Apr,' ELSE '' END,
    CASE WHEN FIND_IN_SET(5, delMonth) THEN 'May,' ELSE '' END,
    CASE WHEN FIND_IN_SET(6, delMonth) THEN 'Jun,' ELSE '' END,
    CASE WHEN FIND_IN_SET(7, delMonth) THEN 'Jul,' ELSE '' END,
    CASE WHEN FIND_IN_SET(8, delMonth) THEN 'Aug,' ELSE '' END,
    CASE WHEN FIND_IN_SET(9, delMonth) THEN 'Sep,' ELSE '' END,
    CASE WHEN FIND_IN_SET(10, delMonth) THEN 'Oct,' ELSE '' END,
    CASE WHEN FIND_IN_SET(11, delMonth) THEN 'Nov,' ELSE '' END,
    CASE WHEN FIND_IN_SET(12, delMonth) THEN 'Dec,' ELSE '' END
))
FROM futRoot;

月份将始终以日期顺序显示,无论它们出现在数字字符串中的顺序如何。

正如评论中指出的那样,如果重新设计数据库以删除逗号分隔字段,则此(以及许多其他问题)将更容易解决。有关详细信息,请参阅Is storing a delimited list in a database column really that bad?

答案 1 :(得分:1)

您可以使用一堆replace()语句。例如:

select replace(replace(replace(delMonth, '12', 'Dec'), '11', 'Nov', '10', 'Oct')

您只需要将其延长至所有12个月。按降序执行月份可防止12变为JanFeb。