web-dev-qa-db-ja.com

SQL ServerはOracleのNULLS FIRSTに相当しますか?

したがって、OracleにはNULLS FIRSTがあります。これを使用して、NULL値を先頭に並べ替え、その後に列値を降順に並べ替えることができます。

ORDER BY date_sent NULLS FIRST

SQL Serverで比較できるものは何ですか?日付値がNULLまたは過去であると想定して、これらの代替手段があります。

ORDER BY ISNULL(date_sent, GETDATE()) DESC
ORDER BY (CASE WHEN t.setinactive IS NULL THEN 1 ELSE 2 END), t.setinactive DESC
ORDER BY -CAST(date_sent as int) ASC

他のもの?

46
OMG Ponies

あなたはいくつかのトリックを行うことができます:

ORDER BY (CASE WHEN [Order] IS NULL THEN 0 ELSE 1 END), [Order] 
67
Lukasz Lysik

簡単な答えは次のとおりです。必要な場合にnullの順序を変更するための最適なソリューションは、受け入れられたものです。しかし、必要なのは、それを使用するか、またはそのバリエーションを使用するだけです。

  • DESC + NULLS FIRST:

    ORDER BY (CASE WHEN [Order] IS NULL THEN 0 ELSE 1 END), [Order] DESC

  • ASC +最後のNULL:

    ORDER BY (CASE WHEN [Order] IS NULL THEN 1 ELSE 0 END), [Order] ASC

  • ASC + NULLS FIRST:デフォルトで正常に動作します

  • DESC + NULLS LAST:デフォルトで正常に動作します

その理由を見てみましょう:

ORDER BY句(Transact-SQL)MSDNドキュメント を確認し、ASC | DESCまで下にスクロールすると、次のように読むことができます。

ASC |説明

指定された列の値を昇順または降順でソートすることを指定します。 ASCは、最低値から最高値にソートします。 DESCは最高値から最低値にソー​​トします。 ASCはデフォルトのソート順です。 Null値は、可能な最小値として扱われます。

したがって、デフォルトでASC順序を指定すると、NULLS FIRSTのように機能します。また、DESCを指定すると、NULLS LASTのように機能します。

したがって、DESCの順序でNULLS FIRSTの動作を変更し、ASCの順序でNULLS LASTの動作を変更するだけで済みます。

私見、必要な場合にnullの順序を変更するための最良の解決策は受け入れられたものですが、私は答えの最初にさまざまなケースに適応したものを含めました。

12
JotaBe

使用例/ Whenステートメント、例えば:

ORDER BY (case WHEN ColINT IS NULL THEN {maxIntValue} ELSE ColINT END) DESC

ORDER BY (case WHEN ColVChar IS NULL THEN {maxVCharValue} ELSE ColVChar END) DESC

ORDER BY (case WHEN ColDateT IS NULL THEN {maxDateTValue} ELSE ColDateT END) DESC

...等々。

または、列のタイプと最大値を気にしないのでさらに良いです。

ORDER BY (case WHEN ColAnyType IS NULL THEN 1 ELSE 0 END) DESC, ColAnyType DESC
5
Novitzky

現在の日付より古い日付の行があり、現在より古い日付の行がある場合、リストの中央にNULLSが表示されます。代わりに、リストの中央でソートされない値を使用する必要があります。

IsNull(Date_Sent、 '17530101')で並べ替えdesc

注:その日付は実際には1753年1月1日です。

4
G Mastros

簡単な例:

SELECT (CASE WHEN Value1 IS NULL THEN 1 ELSE 0 END) AS ValueIsNull, Value1, Value2, Value3
FROM TableName
ORDER BY ValueIsNull DESC, Value1 
4
Jonatas Sellos
ORDER BY
  COALESCE(POSTING_DATE,'1900-01-01 00:00:00.000')
 ,OTHER_FIELDS
3
JosephStyons

これは、並べ替え順序でのnullの表示方法を調整する場合の代替方法です。列を無効にし、並べ替え順序を逆にします。残念ながら、dateTime列をCASTする必要があります。

ORDER BY -CAST(date_sent as int) ASC
3
PaulG

私の知る限り、これを制御することはできません。そして、ISNULLを使用した正しいアプローチがあるようです。

文字列では、同じ目的でISNULL(field, '')を使用しました。

1
David Andres