source

Oracle의 NULLS FIRST에 해당하는 SQL Server?

manycodes 2023. 8. 4. 23:12
반응형

Oracle의 NULLS FIRST에 해당하는 SQL Server?

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

다른것은?

몇 가지 속임수를 쓸 수 있습니다.

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

빠른 답변은 다음과 같습니다. 필요한 경우 null 순서를 변경하는 가장 좋은 솔루션은 허용된 솔루션입니다.그러나 필요한 경우에만 사용하거나 변형하여 사용하면 됩니다.

  • 설명 + NULL 먼저:

    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 Clause(Transact-SQL) MSDN 문서를 확인한 후 아래로 스크롤합니다.ASC | DESC다음을 읽을 수 있습니다.

ASC | DESC

지정된 열의 값을 오름차순 또는 내림차순으로 정렬하도록 지정합니다.ASC는 가장 낮은 값에서 가장 높은 값으로 정렬합니다.DESC는 가장 높은 값에서 가장 낮은 값으로 정렬합니다.ASC는 기본 정렬 순서입니다.Null 값은 가능한 가장 낮은 값으로 처리됩니다.

따라서 기본적으로 다음과 같이 지정할 경우ASC순서, 다음과 같이 작동합니다.NULLS FIRST지정한 경우DESC처럼 작동합니다.NULLS LAST.

따라서 다음에 대한 동작만 변경하면 됩니다.NULLS FIRSTDESC주문, 그리고NULLS LASTASC주문.

IMHO, 필요한 경우 null 순서를 변경하는 가장 좋은 해결책은 허용된 방법이지만, 저는 답변의 처음에 다른 경우에 적용된 방법을 포함했습니다.

사용 사례/시점 문장, 예:

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

테이블에 날짜가 지금보다 작은 행이 있고 날짜가 지금보다 큰 다른 행이 있는 경우 NULL이 목록 중앙에 나타납니다.대신 목록 중간에 정렬되지 않는 값을 사용해야 합니다.

IsNull(Date_Sent, '17530101')별 주문 설명

참고: 그 날짜는 사실 1753년 1월 1일입니다.

간단한 예:

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

이 방법은 정렬 순서에서 null이 나타나는 방법을 조정하려는 경우에도 사용할 수 있습니다.열을 비활성화하고 정렬 순서를 반대로 합니다.유감스럽게도 dateTime 열을 캐스트해야 합니다.

ORDER BY -CAST(date_sent as int) ASC

제가 알기로는, 당신은 이것을 통제할 수 없습니다.그리고 당신은 올바른 접근법을 가지고 있는 것처럼 보입니다.ISNULL.

끈으로, 저는 사용했습니다.ISNULL(field, '')같은 목적으로

언급URL : https://stackoverflow.com/questions/1456653/sql-server-equivalent-to-oracles-nulls-first

반응형