대소 문자를 구분하지 않고 결과를 정렬하기 위해 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.