[mysql] 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

다음 해결책을 찾았습니다 ... ORDER BY column * 1. 이름에 숫자가 포함되어 있지 않으면 해당 솔루션을 사용하기 위해 저장됩니까?



답변

이것은 작동해야합니다 :

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


답변

당신은 사용할 수 있습니다 SUBSTRINGCONVERT:

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

name_column“name-“값이있는 열은 어디에 있습니까 ? SUBSTRING제거합니다의 여섯 번째 문자 전에 모든 것을까지 (즉, “이름 -“접두사)와 그 다음 CONVERT변환은 진정한 정수로 남아.

업데이트 : 주석의 변화하는 환경을 고려할 때 (즉 접두사가 무엇이든 될 수 있음) LOCATE믹스 를 던져야합니다 .

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

이것은 물론 숫자가 아닌 접두어에 하이픈이 없다고 가정하지만 관련 의견은 다음과 같이 말합니다.

name 일련의 문자가 될 수 있습니다

안전한 가정이되어야합니다.


답변

단순히 CAST를 사용하십시오.

CAST(column_name AS UNSIGNED)

캐스트 결과의 유형은 다음 값 중 하나 일 수 있습니다.

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


답변

CAST () 를 사용 하여 문자열을 int로 변환 할 수 있습니다 . 예 :SELECT CAST('123' AS INTEGER);


답변

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


답변

간단한 방법으로 SELECT ‘123’+ 0


답변

숫자를 얻으려면 시도하고 SUBSTRING_INDEX(field, '-', 1)변환하십시오.