Program Tip

NULL을 먼저 표시 한 다음 가장 최근 날짜를 보여주는 ORDER BY DATE

programtip 2020. 12. 10. 21:01
반응형

NULL을 먼저 표시 한 다음 가장 최근 날짜를 보여주는 ORDER BY DATE


select 문을 실행하는 저장 프로 시저가 있습니다. 결과를 날짜 필드별로 정렬하고 NULL 날짜가있는 모든 레코드를 먼저 표시 한 다음 가장 최근 날짜를 표시하고 싶습니다.

문은 다음과 같습니다.

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC

이제 NULL 제출 날짜가있는 모든 레코드를 먼저 표시하지만 날짜 값이있는 행에 도달하면 뷰에서 가장 최근 날짜가 아닙니다.

ASC를 DESC로 바꾸면 원하는 순서대로 날짜를 얻지 만 NULL 값은 결과 집합의 맨 아래에 있습니다.

맨 위에 null 값을 표시 한 다음 날짜 값이있을 때 가장 최근에서 가장 오래된 것으로 내림차순으로 정렬 할 수 있도록 쿼리를 구조화하는 방법이 있습니까?


@Chris, 거의 다 가지고 있습니다.

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

[편집 : #Eppz가 현재 표시된대로 위 코드를 수정 해달라고 요청했습니다.]

저는 개인적으로 "매직 넘버"를 만드는 것보다 이것을 더 선호합니다. 매직 넘버는 거의 항상 일어나기를 기다리는 문제입니다.


다음과 같이 NULL을 맨 아래에 놓을 수 있습니다.

ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC

표준 SQL (ISO / IEC 9075-2 : 2003 이상-2008)은 다음을 제공합니다.

ORDER BY SomeColumn NULLS FIRST

대부분의 DBMS는 아직 AFAIK를 지원하지 않습니다.


시험

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC

OrderBy="ColumnName = NULL desc, ColumnName desc"

이 시도

select a, b, c, [Submission Date] from someView ORDER BY isnull ([Submission Date], cast ( '1770/01/01'as datetime)) ASC


나는 이것이 오래되었다는 것을 알고 있지만, 그것을 발견했을 때 나는 수용된 솔루션 인 https://stackoverflow.com/a/821856/7177892 , CASE 문의 결과를 오늘 (GETDATE ()) 또는 실제 날짜.

실물:

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

쉽게 한:

ORDER BY (CASE WHEN [Submission Date] IS NULL 
               THEN GETDATE() 
               ELSE [Submission Date] 
          END) DESC

다른 모든 것보다 간단 할 수있는 또 다른 제안이 있습니다.

SQL Server의 경우 경우를 제외하고 대부분의 옵션이 작동하지 않습니다.

나는 이것이 실제로 나에게 잘 작동한다는 것을 알았습니다 .ORDER BY ISNULL (Submission_Date, GETDATE ()) DESC

쿼리의 순서 비트에서 GETDATE () 값을 null 인 Submittion_Date 값에 할당하면 순서가 올바르게 나옵니다.

참고 URL : https://stackoverflow.com/questions/821798/order-by-date-showing-nulls-first-then-most-recent-dates

반응형