복붙노트

[SQL] 번호로 주문에 대한 SQL - 1,2,3,4 등 대신 1,10,11,12

SQL

번호로 주문에 대한 SQL - 1,2,3,4 등 대신 1,10,11,12

나는 값 999을 가지고 내 데이터베이스에서 숫자 열을 기준으로 순서를 시도하고 있습니다

언제 사용

ORDER_BY registration_no ASC

나는 얻다….

1
101
102
103
104
105
106
107
108
109
11
110
Etc…

그 첫 번째 숫자에 의해 순서로 나타납니다 그래서 같은 숫자에 반대한다.

합니까 나는 값이 주문하려는 경우 SQL이 사용하는 어떤 사람을 알고? 그래서 1,2,3,4,5,6 등

해결법

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

    1.그들은 VARCHAR로 저장 될 때 양의 정수에 의한 명령에 한 가지 방법은, 먼저 다음 값 길이에 의해 순서입니다 :

    그들은 VARCHAR로 저장 될 때 양의 정수에 의한 명령에 한 가지 방법은, 먼저 다음 값 길이에 의해 순서입니다 :

    order by len(registration_no), registration_no
    

    열이 숫자가 아닌 값을 포함 할 수있는 경우에 특히 유용합니다.

    참고 : 일부 데이터베이스에서 함수는 문자열의 길이가 길이라는 () 대신 렌 수 있습니다 얻기 위해 ().

  2. ==============================

    2.

    ORDER_BY cast(registration_no as unsigned) ASC
    

    명시 적 숫자 값을 변환한다. 또 다른 가능성은 동일한 것입니다 달성하기 위해

    ORDER_BY registration_no + 0 ASC
    

    어떤 암시 적 대화를 강제 할 것이다.

    사실 당신은 테이블 정의를 확인하고 변경해야합니다. 이 같은 INT에 데이터 유형을 변경할 수 있습니다

    ALTER TABLE your_table MODIFY COLUMN registration_no int;
    
  3. ==============================

    3.당신은 SQL 서버를 사용하는 경우 :

    당신은 SQL 서버를 사용하는 경우 :

    ORDER_BY cast(registration_no as int) ASC
    
  4. ==============================

    4.

    ORDER_BY cast(registration_no as unsigned) ASC
    

    경고가 원하는 결과를 제공한다.

    따라서, 더 나은 이동

    ORDER_BY registration_no + 0 ASC
    

    어떤 SQL 경고없이 깨끗한 결과에 대한.

  5. ==============================

    5.나는 당신의 열 유형이 STRING (CHAR, VARCHAR 등) 및 정렬 절차는 문자열로 정렬되어 있다고 가정합니다. 당신이해야 할 것은 숫자 값으로 값을 변환하는 것입니다. 어떻게 당신이 사용하는 SQL 시스템에 따라 달라집니다해야 할 일.

    나는 당신의 열 유형이 STRING (CHAR, VARCHAR 등) 및 정렬 절차는 문자열로 정렬되어 있다고 가정합니다. 당신이해야 할 것은 숫자 값으로 값을 변환하는 것입니다. 어떻게 당신이 사용하는 SQL 시스템에 따라 달라집니다해야 할 일.

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

    6.가끔은 그냥 텍스트와 혼합 저장 번호에 문제에 대해 선택의 여지가 없어. 우리의 응용 프로그램 중 하나, 우리는 우리의 전자 상거래 사이트에 사용하는 웹 사이트 호스트는 동적으로 목록에서 필터를합니다. 모든 필드 만 표시되는 텍스트를 기준으로 정렬 할 수있는 옵션이 없습니다. 우리는 일을 좋아했다 목록 떨어져 내장 된 필터를 원하는 경우 2 "~ 8" 9 "12" 13 "15"등, 우리는 숫자 값을 읽을 때대로 2-9-13하지 13-2-9를 정렬 할 필요가 있었다. 그래서 나는 패드에 긴 숫자 선도적 인 공간이있는 짧은 숫자의 길이와 함께 SQL 서버 복제 기능을 사용했다. 지금 (20) 등 3 후 정렬된다.

    가끔은 그냥 텍스트와 혼합 저장 번호에 문제에 대해 선택의 여지가 없어. 우리의 응용 프로그램 중 하나, 우리는 우리의 전자 상거래 사이트에 사용하는 웹 사이트 호스트는 동적으로 목록에서 필터를합니다. 모든 필드 만 표시되는 텍스트를 기준으로 정렬 할 수있는 옵션이 없습니다. 우리는 일을 좋아했다 목록 떨어져 내장 된 필터를 원하는 경우 2 "~ 8" 9 "12" 13 "15"등, 우리는 숫자 값을 읽을 때대로 2-9-13하지 13-2-9를 정렬 할 필요가 있었다. 그래서 나는 패드에 긴 숫자 선도적 인 공간이있는 짧은 숫자의 길이와 함께 SQL 서버 복제 기능을 사용했다. 지금 (20) 등 3 후 정렬된다.

    여기 항목 유형 및 클래스 나에게 최소 및 최대 길이, 폭 등을 준 볼 수있는 작업, 그리고되었다 나는 텍스트를 어떻게했는지의 예입니다. (LBnLow 및 LBnHigh는 5 길이 브래킷의 낮은 및 높은 끝입니다.)

    REPLICATE(' ', LEN(LB5Low) - LEN(LB1High)) + CONVERT(NVARCHAR(4), LB1High) + '" and Under' AS L1Text,
    REPLICATE(' ', LEN(LB5Low) - LEN(LB2Low)) + CONVERT(NVARCHAR(4), LB2Low) + '" to ' + CONVERT(NVARCHAR(4), LB2High) + '"' AS L2Text,
    REPLICATE(' ', LEN(LB5Low) - LEN(LB3Low)) + CONVERT(NVARCHAR(4), LB3Low) + '" to ' + CONVERT(NVARCHAR(4), LB3High) + '"' AS L3Text,
    REPLICATE(' ', LEN(LB5Low) - LEN(LB4Low)) + CONVERT(NVARCHAR(4), LB4Low) + '" to ' + CONVERT(NVARCHAR(4), LB4High) + '"' AS L4Text,
    CONVERT(NVARCHAR(4), LB5Low) + '" and Over' AS L5Text
    
  7. ==============================

    7.나는 데이터에 "패드"일을 선호합니다. MySQL은 LPAD를 호출,하지만 당신은 SQL 서버에서 같은 일을하고 주위에 당신의 방법을 사용할 수 있습니다.

    나는 데이터에 "패드"일을 선호합니다. MySQL은 LPAD를 호출,하지만 당신은 SQL 서버에서 같은 일을하고 주위에 당신의 방법을 사용할 수 있습니다.

    ORDER BY  REPLACE(STR(ColName, 3), SPACE(1), '0') 
    

    즉 그래서이 옵션을 제공하고 싶었 왜이 공식은,이 기능은 외부 ORDER BY의 다른 상황에서 매우 유용하다 (3)의 컬럼의 길이를 기준으로 앞에 0을 제공 할 것입니다.

    결과 : 1은 001이되고, 100은 동일하게 유지하면서 10, 010이됩니다.

  8. ==============================

    8.이 문제는 CHAR, VARCHAR 또는 TEXT 데이터 형식의 열을 선언해서입니다. 그냥 등 INT, BIGINT에 데이터 유형을 변경이 사용자 정의 순서의 문제를 해결 것입니다.

    이 문제는 CHAR, VARCHAR 또는 TEXT 데이터 형식의 열을 선언해서입니다. 그냥 등 INT, BIGINT에 데이터 유형을 변경이 사용자 정의 순서의 문제를 해결 것입니다.

  9. from https://stackoverflow.com/questions/16519648/sql-for-ordering-by-number-1-2-3-4-etc-instead-of-1-10-11-12 by cc-by-sa and MIT license