想按以下顺序进行选择。
app.post('/send/sendPlanilha', function(req, res, next){}
逻辑是如果t1.a为空,则按
... ...
order by
case when t1.a is not null
then t1.a
else concat(t2.b, ',', t2.c)
end asc;
t1.a,t2.b,t2.c均为INT或BIGINT。问题是,t1.a被当作String排序,结果就像
t2.b asc, t2.c asc
代替
10
100
1000
...
11
...
主要是因为concat(...)返回一个String。如何解决该问题。
答案 0 :(得分:2)
您的逻辑与此等效:
order by
case
when t1.a is not null
then t1.a
else t2.b
end,
t2.b,
t2.c
或简单地:
order by
coalesce(t1.a, t2.b),
t2.b,
t2.c
或者这个:
order by
coalesce(t1.a, t2.b),
coalesce(t1.a, t2.c)
答案 1 :(得分:1)
您可以使用LPAD()
进行零填充:
order by
case when t1.a is not null
then lpad(t1.a, 20, 0)
else concat(lpad(t2.b, 20, 0) , ',', lpad(t2.c, 20, 0) )
end asc
另一种方法是两次使用CASE表达式:
order by
case when a is not null
then a
else b
end asc,
case when a is not null
then a
else c
end asc