번호로 정렬하는 SQL-1,10,11,12 대신 1,2,3,4 등
값이 1-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
등
로 저장 될 때 양의 정수로 정렬하는 한 가지 방법 varchar
은 먼저 길이로 정렬 한 다음 값으로 정렬하는 것입니다.
order by len(registration_no), registration_no
이는 열에 숫자가 아닌 값이 포함될 수있는 경우 특히 유용합니다.
참고 : 일부 데이터베이스에서는 문자열 길이를 가져 오는 함수가 length()
대신 호출 될 수 있습니다 len()
.
ORDER_BY cast(registration_no as unsigned) ASC
값을 명시 적으로 숫자로 변환합니다. 같은 것을 달성 할 수있는 또 다른 가능성은
ORDER_BY registration_no + 0 ASC
암묵적인 대화를 강요합니다.
실제로 테이블 정의를 확인하고 변경해야합니다. 데이터 유형을 int
이와 같이 변경할 수 있습니다.
ALTER TABLE your_table MODIFY COLUMN registration_no int;
SQL Server를 사용하는 경우 :
ORDER_BY cast(registration_no as int) ASC
열 유형이 STRING (CHAR, VARCHAR 등)이고 정렬 절차가 문자열로 정렬한다고 가정합니다. 해야 할 일은 값을 숫자 값으로 변환하는 것입니다. 이를 수행하는 방법은 사용하는 SQL 시스템에 따라 다릅니다.
나는 데이터에 "PAD"를 선호합니다. MySql은이를 LPAD라고 부르지 만 SQL Server에서 동일한 작업을 수행 할 수 있습니다.
ORDER BY REPLACE (STR (ColName, 3), SPACE (1), '0')
이 수식은 열의 길이 3을 기준으로 선행 0을 제공합니다.이 기능은 ORDER BY 이외의 다른 상황에서 매우 유용하므로이 옵션을 제공하고 싶었습니다.
결과 : 1은 001이되고 10은 010이되고 100은 동일하게 유지됩니다.
때로는 텍스트와 혼합 된 숫자를 저장해야하는 선택의 여지가 없습니다. 응용 프로그램 중 하나에서 전자 상거래 사이트에 사용하는 웹 사이트 호스트는 목록에서 동적으로 필터를 만듭니다. 필드별로 정렬 할 수있는 옵션은 없지만 표시된 텍스트입니다. 2 "~ 8"9 "~ 12"13 "~ 15"등의 목록으로 구성된 필터를 원할 때 13-2-9가 아닌 2-9-13을 정렬하는 데 필요했습니다. 숫자 값 읽기. 그래서 SQL Server Replicate 함수를 가장 긴 숫자의 길이와 함께 사용하여 더 짧은 숫자를 선행 공백으로 채웠습니다. 이제 20은 3 다음에 정렬됩니다.
I was working with a view that gave me the minimum and maximum lengths, widths, etc for the item type and class, and here is an example of how I did the text. (LBnLow and LBnHigh are the Low and High end of the 5 length brackets.)
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
ORDER_BY cast(registration_no as unsigned) ASC
gives the desired result with warnings.
Hence, better to go for
ORDER_BY registration_no + 0 ASC
for a clean result without any sql warnings.
'Programing' 카테고리의 다른 글
변수에 반환 된 부울을 부정하는 방법이 있습니까? (0) | 2020.11.13 |
---|---|
Android의 EditText 내에서 힌트 텍스트를 중앙에 어떻게 배치합니까? (0) | 2020.11.13 |
Web API 컨트롤러에서 기본 URL을 얻는 방법은 무엇입니까? (0) | 2020.11.13 |
이미지를 제목으로 UINavigationBar로 설정할 수 있습니까? (0) | 2020.11.13 |
레이아웃 방향을 세로로 고정하는 방법은 무엇입니까? (0) | 2020.11.13 |