jfluteの日記 このページをアンテナに追加

2008-05-04

OrderBy NullsFirst/Last

| 14:53 |

@DBFlute-0.7.x, Java, C#PostgreSQL: NULLS FIRST/LAST」
http://d.hatena.ne.jp/jflute/20080225/1203868539

の続き:

DBFluteのConditionBeanでも対応しました。
MemberCB cb = new MemberCB();
cb.query().addOrderBy_Birthdate_Asc().withNullsFirst();
【Oracle/PostgreSQL/H2】
order by BIRTHDATE asc nulls first

【SQLServer/MySQL/Derby/DB2】
order by case when BIRTHDATE is not null
    then 1 else 0 end, BIRTHDATE asc
NullsFirst --> Nullが先に並ぶ
NullsLast --> Nullが後に並ぶ

※DB2はこれから検証します...(サポートされているのか否か)
 追記(5/5):DB2の後者の方法で実現しました。

最初はnulls first構文をサポートしているDBに限定しようかと
思いましたが、やはり極力同じインターフェースにしたいので
サポートしました。後者は明らかに「遅そう」ですが、
20件や30件程度のリストであれば特に問題ないかと思います。
Where句で絞らずに10000件とかでOrderByしてしまう
ページング検索だとつらいかも。
早く全DBにサポートしてもらいたいものです。

後者のやり方は、こちらの方の記事を参考にさせて頂きました。
(ありがとうございます)
http://blog.kimuradb.com/?eid=633585

simsim 2008/05/05 01:16 DB2にはNULLS FIRSTは無いです。
SQL SERVER用の例がそのまま使えると思います。
また、以下のスレッドが参考になると思います。
ttp://db2forum.jp/viewtopic.php?t=1986

jflutejflute 2008/05/05 09:16 おお、simさん、ありがとうございます。
なるほど、やはりOrderByでのCaseWhenはちょっと不安ですか。
しかし、With句を構成するのはO/R-Mapperとしてはつらいので、
CaseWhen方式でいくようにします。
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-db2-example
のMemberCBOrderByTestにて実装して検証しました(OK)。

# 最近、ClubDB2は仕事の都合上悔しい思いをしていますが、
# 6月の後編はなんとしても参加したいなぁと。。。

meijikmeijik 2016/12/14 10:25 その後IBM DB2はNULLS FIRST/LASTを実装しました。ただし実装時期は9.xのどこかです。。。IBM DB2 9.5くらいかなぁ。

jflutejflute 2016/12/14 14:16 おおぉ、meijiさん、ありがとうございます!
なるほど、ちょっとずつ色々なDBMSが対応していきますね。
(できればMySQLも...^^)