복붙노트

[SQL] SQL은 오름차순으로 정렬 할 때 널 (null) 값이 마지막으로 올 수 있도록하는 방법

SQL

SQL은 오름차순으로 정렬 할 때 널 (null) 값이 마지막으로 올 수 있도록하는 방법

나는 날짜 필드와 SQL 테이블을 가지고있다. 해당 필드는 널 (null)이 될 수 있습니다. 날짜 시간 필드가 null이 아닌 시작 부분에 목록의 끝입니다 그러나 내가 행을 원하는, 내가 쿼리를하고 난 결과가 날짜 필드를 기준으로 오름차순으로 정렬합니다.

이 작업을 수행하는 간단한 방법이 있나요?

해결법

  1. ==============================

    1.

    select MyDate
    from MyTable
    order by case when MyDate is null then 1 else 0 end, MyDate
    
  2. ==============================

    2.(A 늦게 "비트"하지만 이것은 전혀 언급되지 않았다)

    (A 늦게 "비트"하지만 이것은 전혀 언급되지 않았다)

    당신은 당신의 DBMS를 지정하지 않았습니다.

    표준 SQL (오라클, PostgreSQL을, DB2, 파이어 버드, 아파치 더비, HSQLDB 및 H2와 같은 가장 현대적인 DBMS)에서는 NULLS LAST 또는 NULLS FIRST를 지정할 수 있습니다 :

    사용 NULLS LAST는 마지막에 그들을 정렬하려면 :

    select *
    from some_table
    order by some_column DESC NULLS LAST
    
  3. ==============================

    3.나는 또한 그냥 우연히 발견하고, 다음은 MySQL과 PostgreSQL을에, 나를 위해 트릭을 할 것 같다 :

    나는 또한 그냥 우연히 발견하고, 다음은 MySQL과 PostgreSQL을에, 나를 위해 트릭을 할 것 같다 :

    ORDER BY date IS NULL, date DESC
    

    https://stackoverflow.com/a/7055259/496209에서 발견

  4. ==============================

    4.

    order by coalesce(date-time-field,large date in future)
    
  5. ==============================

    5.당신은 내장 기능을 아래와 같이 null 또는 NOT NULL를 확인하기 위해 사용할 수 있습니다. 나는 그 작업 벌금을 테스트합니다.

    당신은 내장 기능을 아래와 같이 null 또는 NOT NULL를 확인하기 위해 사용할 수 있습니다. 나는 그 작업 벌금을 테스트합니다.

    ISNULL (MyDate가, 1) DESC, MyDate가 ASC MyTable에 의해 주문에서 MyDate가를 선택;

  6. ==============================

    6.엔진이 허용하는 경우 ORDER BY X는 NULL, X는 또는 ORDER BY는 NULLS LAST 사용을하는 것이 X. 그러나 그렇지 않은 이들 세력의 도움을 않는 경우 :

    엔진이 허용하는 경우 ORDER BY X는 NULL, X는 또는 ORDER BY는 NULLS LAST 사용을하는 것이 X. 그러나 그렇지 않은 이들 세력의 도움을 않는 경우 :

    당신이 숫자 유형으로 분류하는 경우이 작업을 수행 할 수 있습니다 (다른 답변에서 스키마를 대출.)

    SELECT *          
    FROM Employees
    ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
    

    null 이외의 번호는 0이되고, 널 (null)은 지난 널 (null)을 정렬하는 일을하게된다.

    또한 문자열이 작업을 수행 할 수 있습니다

    SELECT *
    FROM Employees
    ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
    

    'A'> ''때문입니다.

    이것은 심지어 널 (NULL) INT에 강요하고 위의 int하는 방법을 사용하여 날짜와 함께 작동합니다 :

    SELECT *
    FROM Employees
    ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
    

    (스키마가 HIREDATE있다 척 수 있습니다.)

    이러한 방법을 마련하거나 데이터 유형 (최대)을 (다른 ISNULL 솔루션은 고통 모두 문제)를 변경하는 경우 모든 유형 또는 수정 쿼리의 "최대"값을 관리해야하는 문제를 피할 수 있습니다. 게다가 그들은 CASE보다 훨씬 짧은입니다.

  7. ==============================

    7.주문 열 (순위 등) 숫자 일 때 당신은 그 주문 하강을하여 곱 -1 할 수 있습니다. 그것은 당신이 expecing하고 순서 만 넣어 NULL 마지막을 유지합니다.

    주문 열 (순위 등) 숫자 일 때 당신은 그 주문 하강을하여 곱 -1 할 수 있습니다. 그것은 당신이 expecing하고 순서 만 넣어 NULL 마지막을 유지합니다.

    select *
    from table
    order by -rank desc
    
  8. ==============================

    8.

    SELECT *          
    FROM Employees
    ORDER BY ISNULL(DepartmentId, 99999);
    

    이 블로그 게시물을 참조하십시오.

  9. ==============================

    9.널 (NULL) 날짜 필드를 정렬의 도청 문제에 우수한 솔루션을 제공 주셔서 감사합니다 RedFilter.

    널 (NULL) 날짜 필드를 정렬의 도청 문제에 우수한 솔루션을 제공 주셔서 감사합니다 RedFilter.

    내 프로젝트에 대한 SQL Server 데이터베이스를 사용하고 있습니다.

    '1'로 날짜 NULL 값을 변경하면 해결할 수있는 문제를 날짜 데이터 유형 열에 정렬의 문제를한다. 우리가 날짜 데이터 형식보다 서로 열이 그러나 경우에 그것은 처리되지 않습니다.

    정렬이 포함 된 VARCHAR 열을 처리하기 위해, 나는 열이 'Z'로 시작하는 값이없는 것을 알고로 'ZZZZZZZ'를 사용했습니다. 그것은으로 예상했다.

    같은 라인에, 나는 예상대로 정렬을 얻을 INT 및 기타 데이터 유형에 대한 최대 값 +1을 사용했다. 요구되었다 이것은 또한 나에게 결과를 주었다.

    그러나, 언제나처럼 뭔가를 할 수있는 데이터베이스 엔진 자체에서 쉽게 무언가를 얻기 위해 이상적 일 것입니다 :

    Order by Col1 Asc Nulls Last, Col2 Asc Nulls First 
    

    a_horse_with_no_name에 의해 제공이 질문에 대해 언급 한 바와 같이.

  10. ==============================

    10.오라클에서는 NULLS FIRST 또는 NULLS LAST를 사용할 수 있습니다 지정을 NULL 값이 NULL이 아닌 값 이후 / 이전에 반환되어야한다 :

    오라클에서는 NULLS FIRST 또는 NULLS LAST를 사용할 수 있습니다 지정을 NULL 값이 NULL이 아닌 값 이후 / 이전에 반환되어야한다 :

    ORDER BY { column-Name | [ ASC | DESC ] | [ NULLS FIRST | NULLS LAST ] }
    

    예를 들면 :

    ORDER BY date DESC NULLS LAST
    

    참조 : http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj13658.html

  11. ==============================

    11.은 "사건"을 사용하여 솔루션 보편적이지만, 다음 인덱스를 사용하지 마십시오.

    은 "사건"을 사용하여 솔루션 보편적이지만, 다음 인덱스를 사용하지 마십시오.

    order by case when MyDate is null then 1 else 0 end, MyDate
    

    내 경우, 나는 성능을 필요로했다.

     SELECT smoneCol1,someCol2  
     FROM someSch.someTab
     WHERE someCol2 = 2101 and ( someCol1 IS NULL ) 
      UNION   
     SELECT smoneCol1,someCol2
     FROM someSch.someTab
     WHERE someCol2 = 2101 and (  someCol1 IS NOT NULL)  
    
  12. ==============================

    12.당신이 MariaDB를 사용하는 경우, 그들은 NULL 값에 다음을 언급 선적 서류 비치.

    당신이 MariaDB를 사용하는 경우, 그들은 NULL 값에 다음을 언급 선적 서류 비치.

    NULL 값에 의해 위의 쇼 위해서는 두 가지 방법, 당신은 이러한 결합 할 수 있습니다 ASC 및 DESC 키워드뿐만 아니라. 예를 들어 다른 방법은 NULL 값을 얻을 수 있습니다 첫 번째는 다음과 같습니다

    SELECT col1 FROM tab ORDER BY ISNULL(col1) DESC, col1;
    --                                         ^^^^
    
  13. ==============================

    13.사용 NVL 기능

    사용 NVL 기능

      select * from MyTable order by NVL(MyDate, to_date('1-1-1','DD-MM-YYYY'))
    

    여기에서 가장 유명한 DBMS에서 NVL의 대안이다

  14. ==============================

    14.

    order by -cast([nativeDateModify] as bigint) desc
    
  15. from https://stackoverflow.com/questions/1498648/sql-how-to-make-null-values-come-last-when-sorting-ascending by cc-by-sa and MIT license