目前在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");
答案 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";