SQL 순서 문자열(숫자)
로 저장된 번호가 있습니다.VARCHAR
MySQL my my my my my my 。는 그것들을 수 .INT
른른른른른른
분류할 때 숫자가 아닌 문자로 받아들입니다.
데이터베이스에는
1 2 3 4 5 6 7 8 9 10...
내 페이지에는 다음과 같은 순서 목록이 표시됩니다.
1 10 2 3 4 5 6 7 8 9
오름차순으로 표시하려면 어떻게 해야 하나요?
숫자만 저장할 경우 가능하면 열의 데이터 유형을 숫자로 변경해야 합니다.
이 작업을 수행할 수 없는 경우 열 값을 다음과 같이 지정합니다.integer
을 가지고 분명히
select col from yourtable
order by cast(col as unsigned)
또는 암묵적으로 예를 들어 숫자로 변환하도록 강제하는 수학적 연산을 사용하는 경우
select col from yourtable
order by col + 0
BTW MySQL은 문자열을 왼쪽에서 오른쪽으로 변환합니다.예:
string value | integer value after conversion
--------------+--------------------------------
'1' | 1
'ABC' | 0 /* the string does not contain a number, so the result is 0 */
'123miles' | 123
'$123' | 0 /* the left side of the string does not start with a number */
다른 방법으로는, 깁스 하나 없이.
(주조가 불가능한 JPA 2.0을 사용하는 분)
select col from yourtable
order by length(col),col
EDIT: 양의 정수에서만 작동합니다.
다른 간단한 방법
ORDER BY ABS(column_name)
제가 분류하고 있는 칼럼은 영숫자와 영숫자의 조합이 있기 때문에, 이 투고의 제안을 기점으로 삼아 이것을 생각해 냈습니다.
DECLARE @tmp TABLE (ID VARCHAR(50));
INSERT INTO @tmp VALUES ('XYZ300');
INSERT INTO @tmp VALUES ('XYZ1002');
INSERT INTO @tmp VALUES ('106');
INSERT INTO @tmp VALUES ('206');
INSERT INTO @tmp VALUES ('1002');
INSERT INTO @tmp VALUES ('J206');
INSERT INTO @tmp VALUES ('J1002');
SELECT ID, (CASE WHEN ISNUMERIC(ID) = 1 THEN 0 ELSE 1 END) IsNum
FROM @tmp
ORDER BY IsNum, LEN(ID), ID;
결과.
ID
------------------------
106
206
1002
J206
J1002
XYZ300
XYZ1002
도움이 되었으면 좋겠다
난 이거면 돼.
select * from tablename
order by cast(columnname as int) asc
같은 솔루션을 찾고 있는 사람에게 도움이 될 수 있습니다.
select * from tablename ORDER BY ABS(column_name)
변환하는 또 다른 방법.
문자열 필드가 있는 경우 다음과 같이 변환하거나 숫자 부분을 변환할 수 있습니다. 선행 0을 추가하여 모든 정수 문자열이 동일한 길이를 갖도록 합니다.
ORDER BY CONCAT( REPEAT( "0", 18 - LENGTH( stringfield ) ) , stringfield )
또는 필드의 일부에 따라 'hymbols13', 'hymbols1222' 등을 주문합니다.
ORDER BY CONCAT( REPEAT( "0", 18 - LENGTH( LEFT( stringfield , 10 ) ) ) , LEFT( stringfield , 10 ) )
문자 접두사가 있는 정렬 필드도 찾고 있었습니다.이게 내가 찾은 해결책이야.이것은 같은 솔루션을 찾고 있는 사용자에게 도움이 될 수 있습니다.
필드 값:
FL01,FL02,FL03,FL04,FL05,...FL100,...FL123456789
select SUBSTRING(field,3,9) as field from table order by SUBSTRING(field,3,10)*1 desc
SUBSTRING(field,3,9)
9는 최대 9자리 정수값을 보유하기에 충분하기 때문에 9를 입력합니다.
따라서 결과는 123456789 123456788 123456787...100 99...2 1이 됩니다
음수, 분수, 문자열 등 모든 것을 처리합니다.
ORDER BY ISNUMERIC(col) DESC, Try_Parse(col AS decimal(10,2)), col;
Adonis를 사용하는 경우ABC-202, ABC-201 등의 ID가 혼재된 JS에서는 raw 쿼리를 Query Builder와 결합하여 위의 솔루션을 구현할 수 있습니다(https://stackoverflow.com/a/25061144/4040835):
const sortField =
'membership_id'
const sortDirection =
'asc'
const subquery = UserProfile.query()
.select(
'user_profiles.id',
'user_profiles.user_id',
'user_profiles.membership_id',
'user_profiles.first_name',
'user_profiles.middle_name',
'user_profiles.last_name',
'user_profiles.mobile_number',
'countries.citizenship',
'states.name as state_of_origin',
'user_profiles.gender',
'user_profiles.created_at',
'user_profiles.updated_at'
)
.leftJoin(
'users',
'user_profiles.user_id',
'users.id'
)
.leftJoin(
'countries',
'user_profiles.nationality',
'countries.id'
)
.leftJoin(
'states',
'user_profiles.state_of_origin',
'states.id'
)
.orderByRaw(
`SUBSTRING(:sortField:,3,15)*1 ${sortDirection}`,
{
sortField: sortField,
}
)
.paginate(
page,
per_page
)
메모: 다음 행:SUBSTRING(:sortField:,3,15)*1 ${sortDirection}
,
- '3'은 숫자 앞에 있는 마지막 문자 이외의 색인 번호를 나타냅니다.혼합 ID가 "ABC-123"인 경우 인덱스 번호는 4가 됩니다.
- '15'는 하이픈 뒤에 가능한 한 많은 숫자를 잡기 위해 사용됩니다.
- "1"은 서브스트링을 효과적으로 숫자에 캐스팅하는 서브스트링에 대한 수학 연산을 실시한다.
참조 1: 파라미터 바인딩에 대한 자세한 내용은 https://knexjs.org/ #Raw-Bindings 참조 2: Adonis Raw Queries: https://adonisjs.com/docs/4.1/query-builder#_raw_queries 를 참조하십시오.
필드를 VARCHAR 대신 INT로 변경합니다.
다른 사정으로 인해 INT로 만들 수 없습니다.
그럼 상황에 따라 먼저 해결하세요.그렇지 않으면 진짜 근본적인 문제를 해결할 수 있습니다.MySQL CAST를 사용하는 것은 옵션이지만 수정해야 할 잘못된 스키마를 마스킹합니다.
언급URL : https://stackoverflow.com/questions/11808573/sql-order-string-as-number
'programing' 카테고리의 다른 글
dict 목록에서 값 목록 가져오기 (0) | 2023.01.22 |
---|---|
Python 'for' 루프에서 범위 지정 (0) | 2023.01.22 |
MySQL Update 내부 가입 테이블 쿼리 (0) | 2023.01.22 |
왜 React의 Virtual DOM 컨셉이 더티한 모델 체크보다 더 성능적이라고 하는가? (0) | 2023.01.22 |
결과를 검색할 때 모호한 열 이름을 해결하는 방법은 무엇입니까? (0) | 2023.01.22 |