대소 문자를 구분하지 않고 결과를 정렬하기 위해 SQL Order By 문을 사용하는 방법은 무엇입니까?


144

알파벳순으로 정렬하려는 SQLite 데이터베이스가 있습니다. 문제는 SQLite가 정렬하는 동안 A = a를 고려하지 않는 것이므로 다음과 같은 결과를 얻습니다.

A B C T a b cg

난 갖길 원해:

A a b B C c g T

내가 모르는 특별한 SQL 작업은 무엇입니까?

SELECT * FROM NOTES ORDER BY title

2
더 효율적인 방법은 무엇입니까? "TITLE COLLATE NOCASE에 의한 주문"또는 "LOWER (TITLE)에 의한 주문". (FYI, 필자의 경우 Android, 즉 SQLite에서 실행)
— Pascal

답변:


253

당신은 또한 할 수 있습니다 ORDER BY TITLE COLLATE NOCASE.

편집 : ASC또는 을 지정 해야하는 경우 DESC다음 NOCASE과 같이 추가하십시오

ORDER BY TITLE COLLATE NOCASE ASC

또는

ORDER BY TITLE COLLATE NOCASE DESC

8
"ORDER BY TITLE COLLATE NOCASE"가 "ORDER BY LOWER (TITLE)"보다 효율적입니까?
— 파스칼

짜증나! 그렇지 않습니까? 와! 도대체 SQLite가 정렬에 대소 문자를 구분하는 이유는 무엇입니까 ... 불행히도 내 마음에 맞지 않습니다!
— Vincy

1
@Vincy : 대소 문자를 구분하는 문자열 비교에서 이상한 점을 보지 못했습니다. 의 그 방법 <, ==나는 잘 알고있어하는 모든 프로그래밍 언어에서 기본적으로 등 사업자 작동합니다.
— dan04

@ dan04 대소 문자를 구분해야하는 문자열이 얼마나 자주 필요합니까? 그것이 어리석은 이유입니다. 세계에서 누가 줄을 분류하면서 사건을 걱정합니까? 내가 볼 수있는 유일한 장소는 인증 또는 암호 유효성 검사입니다. 이것이 기본적으로 CASE INSENSITIVE, imo!
— Vincy 2019

데이터베이스가 UTF8을 사용하는 경우 일반적으로 즉시 작동하지 않습니다. (제목이 SQLite만을 가리키는 것은 아닙니다.)이 경우 아래 lower () 또는 upper () 사용 제안이 작동합니다.
— marco

99

정렬을 위해 모든 것을 소문자로 변환 할 수 있습니다.

SELECT * FROM NOTES ORDER BY LOWER(title);

대문자가 소문자보다 먼저 끝나도록하려면 보조 문자로 추가하십시오.

SELECT * FROM NOTES ORDER BY LOWER(title), title;

1
여러 열로 정렬하고 있습니다. 각 열 주위에 LOWER를 넣어야합니까?
— CodeFusionMobile

2
예, ORDER BY의 동작을 대소 문자를 구분하지 않도록 변경할 수있는 방법이 없습니다.
— 차드 버치

1
'UPPER'와 'LOWER'사이에 차이가 있습니까
— Jagadeesh

2
이 목적을 위해 동일한 효과를 얻을 수있는 것은 아니며, 이는 모든 품목의 사례를 동일하게 만드는 것입니다.
— 벤 바론

1
[] ^ _`문자에 대해서만 다릅니다.
— dan04

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
답변 주셔서 감사합니다. 그러나 좋은 답변 에는 항상 수행 한 내용과 왜 그런 방식으로 수행 되었는가에 대한 설명이 포함됩니다.
— B001 ᛦ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.