반응형
MySQL 결과 주문
MySQL/MariaDB를 사용하고 있습니다.사용처에 대한 문의가 있습니다.ORDER BY user_id ASC
다음과 같은 결과를 얻을 수 있습니다.
+---------+
| user_id |
+---------+
| admin1 |
| admin10 |
| admin11 |
| admin2 |
| user1 |
| user10 |
| user11 |
| user12 |
| user13 |
| user2 |
| user20 |
| user21 |
| user22 |
| user23 |
+---------+
나는 제안된 해결책을 시도했다.ORDER BY LENGTH(user_id), user_id ASC
그것은 모든 사람들만큼 효과가 있다.user_id
님의 첫머리는user
하지만 만약 내가user_id
는, 「」라고 합시다.admin
그럼 이렇게 되겠네요
+---------+
| user_id |
+---------+
| user1 |
| user2 |
| admin1 |
| admin2 |
| user10 |
| user11 |
| user12 |
| user13 |
| user20 |
| user21 |
| user22 |
| user23 |
| admin10 |
| admin11 |
+---------+
하지만 결과는 다음과 같이 주문했으면 합니다.
+---------+
| user_id |
+---------+
| admin1 |
| admin2 |
| admin10 |
| admin11 |
| user1 |
| user2 |
| user10 |
| user11 |
| user12 |
| user13 |
| user20 |
| user21 |
| user22 |
| user23 |
+---------+
SQL을 사용하여 이 작업을 수행할 수 있습니까?
를 사용합니다.LENGTH
열뿐만 아니라 함수도 사용할 수 있습니다.
SELECT *
FROM yourtable
ORDER BY LENGTH(user_id), user_id ASC
산출량
user_id
user1
user2
user10
user11
user12
user13
user20
user21
user22
user23
SQL Fider: http://sqlfiddle.com/ #!9/23f4de/3/0
ID는 항상 REGEXP '^[[:alpha:]]+[[:digit:]]+$
만약 그렇다면,REGEXP_REPLACE
알파벳 부분을 기준으로 정렬할 숫자를 제거한 다음 문자를 제거하고 0을 추가하여 숫자 부분을 정렬합니다.예를 들어 다음과 같습니다.
ORDER BY REGEXP_REPLACE(user_id, '[[:digit:]]+$', ''),
REGEXP_REPLACE(user_id, '^[[:alpha:]]+', '') + 0
또 다른 아이디어:
ORDER BY REGEXP_REPLACE(user_id,
'([[:digit:]]+)',
RIGHT(CONCAT('0000000', '\\1'), 8))
원칙은 문자열 비교가 "올바르게" 작동하도록 숫자 부분에 선행 0을 충분히 배치하는 것입니다.
주의: MySQL에서 사용할 수 없는 MariaDB 기능을 사용합니다.
언급URL : https://stackoverflow.com/questions/45345401/order-mysql-result
반응형
'programing' 카테고리의 다른 글
플라스크에 http 헤더를 넣는 방법 (0) | 2022.10.23 |
---|---|
Java, Apache kafka에서 항목의 메시지 수를 가져오는 방법 (0) | 2022.10.23 |
태그를 생략하고 태그의 내용을 렌더링하는 사용자 지정 Vue 지시문을 사용하시겠습니까? (0) | 2022.10.23 |
JavaScript에 RegExp.escape 함수가 있나요? (0) | 2022.10.23 |
판다 열을 여러 열로 분할 (0) | 2022.10.22 |