MySQL에서 숫자로 막대 필드 정렬
나는 들판이 있습니다.number
유형의varchar
비록 그것이 유형일지라도.varchar
정수 값과 선행 0(선택 사항)을 저장합니다.A 정렬은 사전순으로 정렬합니다."42"
앞에 오는"9"
. 숫자 값으로 정렬하려면 어떻게 해야 합니까("9"
앞에"42"
)?
현재 다음 쿼리를 사용하고 있습니다.
SELECT * FROM table ORDER BY number ASC
사용해 보세요.
SELECT * FROM table_name ORDER BY CAST(field_name as SIGNED INTEGER) ASC
사실 저는 흥미로운 것을 발견했습니다.
SELECT * FROM mytable ORDER BY LPAD(LOWER(mycol), 10,0) DESC
이를 통해 다음과 같은 필드를 정렬할 수 있습니다.
1
2
3
10
A
A1
B2
10A
111
몇 가지 방법이 있습니다.
- 문자열이 아닌 숫자 값으로 저장합니다.당신은 이미 그것을 할인했습니다. 당신은 다음과 같은 조건을 유지하기를 원하기 때문입니다.
00100
선두의 0으로 온전한 상태입니다. - 숫자로 캐스팅된 문자열을 기준으로 정렬합니다.이는 효과적이지만 규모가 적절한 데이터베이스의 성능을 떨어뜨리는 요인이 됩니다.행당 함수는 실제로 잘 확장되지 않습니다.
- 문자열 및 인덱스와 동일한 숫자인 세 번째 열을 추가합니다.그러면 an을 사용합니다.
insert
/update
트리거 - 문자열 열이 변경될 때마다 올바르게 설정됩니다.
대다수의 데이터베이스는 기록된 것보다 훨씬 더 자주 읽히기 때문에 위의 세 번째 옵션은 계산 비용을 상각합니다.insert
/update
) 전체 선택 항목입니다.숫자 열을 사용하여 순서를 지정하기 때문에(행당 함수가 없음) 선택 항목의 속도가 눈에 띄게 빨라집니다.
삽입 및 업데이트 속도는 더 느리겠지만, 이는 당신이 지불하는 비용이며, 솔직히 말해서, 지불할 가치가 충분히 있습니다.
트리거를 사용하면 두 열이 보조를 맞추므로 테이블의 ACID 속성이 유지됩니다.또한 대부분의 성능 최적화에서 공간을 시간과 맞바꿀 수 있는 잘 알려진 관용구입니다.
우리는 (같은 것을 사용하는 대신) 원래의 성과 함께 낮은 경우의 성을 저장하는 것과 같은 많은 상황에서 이 "꼼수"를 사용했습니다.tolower
), 7자로 된 문자열을 가진 모든 사용자를 찾기 위한 문자열 식별 길이(사용 방법)len
) 등.
결과를 이해하고 완화할 수 있다면 성능을 위해 세 번째 일반적인 형태로 되돌릴 수 있습니다.
SELECT * FROM table ORDER BY number + 0
방금 배운 트릭.varchar 필드 순서 절에 '+0'을 추가합니다.
SELECT * FROM table ORDER BY number+0 ASC
이제 위에 이 대답이 보입니다.저는 이것이 필드와 정수를 타이핑하는 것인지 궁금합니다.저는 성능을 비교하지 않았습니다.잘 작동하고 있습니다.
Er353, ER280, ER30, ER36과 같은 값을 가진 테이블의 경우 기본 정렬은 ER280 ER30 ER353 ER36을 제공합니다.
SELECT fieldname, SUBSTRING(fieldname, 1, 2) AS bcd,
CONVERT(SUBSTRING(fieldname, 3, 9), UNSIGNED INTEGER) AS num
FROM table_name
ORDER BY bcd, num;
결과는 이 순서대로 ER30 ER36 ER280 ER353입니다.
당신은 다음 sql 쿼리를 사용하여 당신의 요구사항에 따라 주문을 받을 수 있습니다.
SELECT * FROM mytable ORDER BY ABS(mycol)
에 란에가 .username
중을 VARCHAR
다음과 같습니다.
username1
username10
username100
할 수 있는 일:
SELECT username,
CONVERT(REPLACE(username, 'username', ''), UNSIGNED INTEGER) AS N
FROM users u
WHERE username LIKE 'username%'
ORDER BY N;
그것은 싸지 않지만, 그 일을 합니다.
SELECT * FROM table ORDER BY number ASC
표시할 항목을 표시해야 합니다.당신이 그것을 분류하는 것처럼 보입니다.id
또는number
는 로정되않으로 .integer
그 순간.
올바른 순서로 영숫자를 정렬하여 MySQL ORDER
예:
SELECT `alphanumericCol` FROM `tableName` ORDER BY
SUBSTR(`alphanumericCol` FROM 1 FOR 1),
LPAD(lower(`alphanumericCol`), 10,0) ASC
출력:
0
1
2
11
21
100
101
102
104
S-104A
S-105
S-107
S-111
숫자를 맨 위로 유지한 다음 알파벳 순으로 정렬하는 또 다른 옵션입니다.
IF(name + 0, name + 0, 9999999), name
준비 완료: 1*field_name으로 주문
언급URL : https://stackoverflow.com/questions/4686849/sorting-varchar-field-numerically-in-mysql
'source' 카테고리의 다른 글
도커 컨테이너 SSL 인증서 (0) | 2023.08.10 |
---|---|
Visual Studio 2013 ASP에서 Antlr 패키지의 목적은 무엇입니까?NET 프로젝트? (0) | 2023.08.10 |
HTML 테이블을 별도의 시트에서 Excel(.xls)로 내보내기 (0) | 2023.08.10 |
봇맨 대화가 mysql db에 데이터를 저장하지 않습니다. (0) | 2023.08.10 |
strto 시간과 날짜를 사용하여 현재와 비교하여 이전 달과 연도를 얻는 방법은 무엇입니까? (0) | 2023.08.10 |