[SQL] 숫자 변환 VARCHAR 정렬
SQL숫자 변환 VARCHAR 정렬
나는 열을 기준으로 정렬 된 쿼리를 가지고 :
select * from mytable order by column asc — sort table
출력하므로 열 유형은 VARCHAR이다 :
1
10
100
11
12
13
어떻게 내가 출력이 그래서 그들이 숫자 값을 기준으로 정렬 할해야 종류의 경우 :
1
10
11
12
13
100
해결법
-
==============================
1.사용하다:
사용하다:
order by cast(column as unsigned) asc
-
==============================
2.당신은 INT 전용으로 열을 취급 할 경우이 작업을 사용할 수 있습니다 :
당신은 INT 전용으로 열을 취급 할 경우이 작업을 사용할 수 있습니다 :
SELECT * FROM mytable ORDER BY column+0; 1 10 11 12 13 100
또는이 당신은 INT와 VARCHAR 모두 같은 치료 열을 원하는 경우
SELECT * FROM mytable ORDER BY column+0, column; #this will sort the column by VARCHAR first and then sort it by INT abc xyz 1 10 11 12 13 100
-
==============================
3.이것은 잘 작동합니다 :
이것은 잘 작동합니다 :
order by (0 + column) asc
-
==============================
4.우리는 단순히 약간 선언하여 순서를 수정하면 자연스럽게 필드를 정렬, 당신은 MySQL을 강제 할 수 있습니다 (필드에 의해 순서에 "0"을 추가).
우리는 단순히 약간 선언하여 순서를 수정하면 자연스럽게 필드를 정렬, 당신은 MySQL을 강제 할 수 있습니다 (필드에 의해 순서에 "0"을 추가).
> select * from mytable order by column+0 asc; column 1 10 11 12 13 100
-
==============================
5.
Added a full code script here , but need to sort 1001 and 1002 before - as well. We have total 5 solution , means 5 different queries as solution with full script. ============================================================= SET NAMES utf8; SET foreign_key_checks = 0; SET time_zone = 'SYSTEM'; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; DROP TABLE IF EXISTS `varchar_sort`; CREATE TABLE `varchar_sort` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `actual_user_id` varchar(200) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `varchar_sort` (`user_id`, `actual_user_id`) VALUES (1, '1001-4'), (2, '1001-1'), (3, '1001-111'), (4, '1002-1'), (5, '1001-66'), (6, '1001-100'), (7, '1001-110'); SELECT user_id,actual_user_id,CONVERT(SUBSTRING_INDEX(actual_user_id,'-',-1),UNSIGNED INTEGER) AS num FROM varchar_sort ORDER BY num; SELECT user_id,actual_user_id FROM varchar_sort ORDER BY CONVERT(SUBSTRING(actual_user_id, 6), SIGNED INTEGER); SELECT user_id,actual_user_id FROM varchar_sort ORDER BY CONVERT(SUBSTRING(actual_user_id, LOCATE('-', actual_user_id) + 1), SIGNED INTEGER); SELECT *, CAST(SUBSTRING_INDEX(actual_user_id, '-', -1) AS UNSIGNED) as num FROM varchar_sort ORDER BY num;
변환에 의해 varchar_sort 순서 SELECT * FROM ((actual_user_id 교체 '-', ''), 부호있는 정수) 오름차순
**Need to sort 1001 and 1002 as well.**
from https://stackoverflow.com/questions/1868965/varchar-to-number-conversion-for-sorting by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 협회가 존재하지 않는다면 확인 범위를 레일 (0) | 2020.06.29 |
---|---|
[SQL] 큰 길이 VARCHAR2 열을 정의 영향 (0) | 2020.06.29 |
[SQL] 어떻게 대소 문자를 구분 그룹 BY를 할까? (0) | 2020.06.29 |
[SQL] MySQL의 : 한 테이블에서 레코드를 카운트 한 다음 다른 업데이트 (0) | 2020.06.29 |
[SQL] SQL ORDER 수치가 문자 (0) | 2020.06.29 |