如何在SQL中创建像DECODE函数的C ++宏?

时间:2016-10-22 02:11:03

标签: c++ macros

目前在C ++中,我必须编写这样的代码来转换值:

    if (a == 1) {
        b = "one";
    } else if (a == 2) {
        b = "two"
    } else if (a == 3) {
        b = "three"
    } else {
        b = "too_big"
    }

如何在SQL中创建宏DECODE,以便我可以使用这样的代码:

b = DECODE(a, 1, "one", 2, "two", 3, "three", "too_big");

1 个答案:

答案 0 :(得分:0)

我在C中有点生疏,并且会使用可变参数函数。但是有一个宏......

首先是一个有效的表达(我希望):

b = (char* s[] = {"one", "two", "three", "too_big"}, 
     int n = sizeof(s) / sizeof(char*),
     s[(a >= n ? n : a) - 1]);

然后会发生什么:

b = DECODE(a, { "one", "two", "three", "too_big" });

这不完全相同。

所以宏:

#define DECODE(a, sss) (char* s[] = sss, \
            int n = sizeof(s) / sizeof(char*), s[(a >= n ? n : a) - 1])

可变函数更好。 我自然选择switch语句。或者:

 b = a == 1 ? "one"
   : a == 2 ? "two"
   : a == 3 ? "three"
   : "too_big";