복붙노트

[SQL] MySQL의 쿼리에서 숫자로 변환 텍스트

SQL

MySQL의 쿼리에서 숫자로 변환 텍스트

그것은 MySQL의 쿼리에서 숫자로 텍스트를 변환 할 수 있습니까? 나는 이름과 "이름 - 번호"의 형식에 숫자를 구성 식별자와 열을 가지고있다. 열이 VARCHAR의 유형이 있습니다. 나는 수 (동일한 이름을 가진 행)에 따라 행을 정렬하고 싶지만 열이 할 일 문자 순서, 즉에 따라 정렬됩니다

name-1
name-11
name-12
name-2

나는 수에 잘라 경우, 나는 '진짜'번호로 'VARCHAR'수를 변환하고 행을 정렬하는 데 사용할 수 있습니다? 내가 얻은 다음과 같은 순서로 싶습니다.

name-1
name-2
name-11
name-12

나는 별도의 열로 수를 나타냅니다 수 없습니다.

편집 2011-05-11 9시 32분

나는 그것이 그 솔루션을 사용하는 저장되는 이름에 숫자를 포함하지 않을 경우 * 1. 열 BY 솔루션 ... ORDER 다음 발견?

해결법

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

    1.이 작업을해야합니다 :

    이 작업을해야합니다 :

    SELECT field,CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num
    FROM table
    ORDER BY num;
    
  2. ==============================

    2.당신은 SUBSTRING 및 CONVERT를 사용할 수 있습니다 :

    당신은 SUBSTRING 및 CONVERT를 사용할 수 있습니다 :

    SELECT stuff
    FROM table
    WHERE conditions
    ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER);
    

    어디 name_column는 "이름 -"값으로 열입니다. 하위 문자열 제거합니다의 여섯 번째 문자 전에 모든 것을까지 (즉, "이름 -"접두사)와 다음 CONVERT는 실제 정수로 남아 변환합니다.

    업데이트 : 코멘트에 주어진 변화하는 환경 (즉, 접두사 아무것도 할 수있다), 당신이 믹스에서 찾은 던져해야합니다 :

    ORDER BY CONVERT(SUBSTRING(name_column, LOCATE('-', name_column) + 1), SIGNED INTEGER);
    

    물론 이것은 숫자가 아닌 접두사 관련 코멘트가 말한다 그것을하지만 어떤 하이픈이없는 것으로 가정합니다 :

    그래서 안전한 가정해야한다.

  3. ==============================

    3.간단하게 사용 CAST,

    간단하게 사용 CAST,

    CAST(column_name AS UNSIGNED)
    

    캐스트 결과에 대한 유형은 다음 값 중 하나 일 수 있습니다 :

    BINARY[(N)]
    CHAR[(N)]
    DATE
    DATETIME
    DECIMAL[(M[,D])]
    SIGNED [INTEGER]
    TIME
    UNSIGNED [INTEGER]
    
  4. ==============================

    4.당신이 int로 문자열로 변환하는 CAST ()를 사용할 수 있습니다. 예를 들면 SELECT CAST ( '123'AS INTEGER);

    당신이 int로 문자열로 변환하는 CAST ()를 사용할 수 있습니다. 예를 들면 SELECT CAST ( '123'AS INTEGER);

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

    5.

    SELECT *, CAST(SUBSTRING_INDEX(field, '-', -1) AS UNSIGNED) as num FROM tableName ORDER BY num;
    
  6. ==============================

    6.하나의 간단한 방법 SELECT '123'+ 0

    하나의 간단한 방법 SELECT '123'+ 0

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

    7.다음 변환 - SUBSTRING_INDEX와 숫자 시도 ( '', 1 필드를) 얻을 수 있습니다.

    다음 변환 - SUBSTRING_INDEX와 숫자 시도 ( '', 1 필드를) 얻을 수 있습니다.

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

    8.기본 키는 형식의 문자열이 같은 경우 ABC / EFG / EE / 123분의 13 (서열 번호) 문자열의 정렬이 쉽게 구분과 분류에 사용할 수 있습니다 ( "/")

    기본 키는 형식의 문자열이 같은 경우 ABC / EFG / EE / 123분의 13 (서열 번호) 문자열의 정렬이 쉽게 구분과 분류에 사용할 수 있습니다 ( "/")

    우리는 키 이러한 유형의 테이블을 주문하려면 다음 쿼리를 사용할 수 있습니다

    SELECT * FROM `TABLE_NAME` ORDER BY 
    CONVERT(REVERSE(SUBSTRING(REVERSE(`key_column_name`), 1, LOCATE('/', REVERSE(`key_column_name`)) - 1)) , UNSIGNED INTEGER) DESC
    
  9. ==============================

    9.

    cast(REGEXP_REPLACE(NameNumber, '[^0-9]', '') as UNSIGNED)
    
  10. ==============================

    10.일반적인 방법은해야 할 일 :

    일반적인 방법은해야 할 일 :

    SELECT * FROM your_table ORDER BY LENTH(your_column) ASC, your_column ASC
    
  11. from https://stackoverflow.com/questions/5960620/convert-text-into-number-in-mysql-query by cc-by-sa and MIT license