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;
답변
당신은 사용할 수 있습니다 SUBSTRING
및 CONVERT
:
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)
변환하십시오.