IBM DB2:按天排序

我的数据库中有一列,以“星期一”,“星期二”等格式列出日期:

是否可以对我的结果查询进行排序,以便我首先在星期一,然后在星期二,然后在星期三,然后在星期四等等获得结果?

我检查了几个答案,但按顺序使用案例似乎无效。

谢谢。

编辑:我在C的光标中使用它

lqlzzm156 回答:IBM DB2:按天排序

最简单的方法可能是case表达式:

order by (case dow
            when 'Monday' then 1
            when 'Tuesday' then 2
            when 'Wednesday' then 3
            when 'Thursday' then 4
            when 'Friday' then 5
            when 'Saturday' then 6
            when 'Sunday' then 7
          end)

如果愿意,您可以使用locate()将其短路:

order by locate(dow,'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday')
,

您可能已经知道,没有SQL可以满足您的要求。但这是一个肮脏的解决方法。

#!/bin/sh

# create objects
echo "aaa,Monday" > dat.csv
echo "xxx,Thursday" >> dat.csv
echo "ooo,Friday" >> dat.csv
echo "jjj,Saturday" >> dat.csv
echo "bbb,Tuesday" >> dat.csv
echo "ccc,Wednesday" >> dat.csv
echo "yyy,Sunday" >> dat.csv

db2 drop db db1
db2 create db db1
db2 connect to db1
db2 "create table t1 (c1 char(10),c2 char(10))"
db2 "load from dat.csv of del insert into t1"
db2 "select c1,c2 from t1"

# add c3 column and set day of week number there
db2 alter table t1 add column c3 int
db2 "update t1 set c3 = 1 where c2 = 'Monday'" 
db2 "update t1 set c3 = 2 where c2 = 'Tuesday'" 
db2 "update t1 set c3 = 3 where c2 = 'Wednesday'" 
db2 "update t1 set c3 = 4 where c2 = 'Thursday'" 
db2 "update t1 set c3 = 5 where c2 = 'Friday'" 
db2 "update t1 set c3 = 6 where c2 = 'Saturday'" 
db2 "update t1 set c3 = 7 where c2 = 'Sunday'" 

# order by c3,day of week number
db2 "select c1,c2 from t1 order by c3"

第一个“从t1中选择c1,c2”返回:

C1         C2
---------- ----------
aaa        Monday
xxx        Thursday
ooo        Friday
jjj        Saturday
bbb        Tuesday
ccc        Wednesday
yyy        Sunday

“从t1到c3依次选择c1,c2”返回:

C1         C2
---------- ----------
aaa        Monday
bbb        Tuesday
ccc        Wednesday
xxx        Thursday
ooo        Friday
jjj        Saturday
yyy        Sunday

希望这会有所帮助。

本文链接:https://www.f2er.com/3131212.html

大家都在问