Sqlite3에서 대소문자를 구분하지 않는 문자열 비교
- Sqlite3에서 대소문자를 구분하지 않는 문자열 비교 구현
-
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해
CREATE
쿼리에서COLLATE NOCASE
를 사용합니다. -
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해
SELECT
쿼리에서COLLATE NOCASE
를 사용합니다. -
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위한
LIKE
연산자 사용 -
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해
LOWER()
또는UPPER()
함수 사용
SQLite 데이터베이스 엔진은 C 언어로 개발되었습니다. 단독으로 사용할 수 있는 애플리케이션이 아닙니다. 오히려 애플리케이션 개발자가 애플리케이션을 구현하는 데 사용할 수 있는 라이브러리입니다.
MySQL과 마찬가지로 SQLite도 관계형 데이터베이스 관리 시스템(RDBMS)이며 SQL(구조적 쿼리 언어)에서 구현됩니다. SQLite 버전 3에서 데이터베이스는 문자열 일치 시 대소문자를 구분하므로 사용자가 where
절에서 =
(단일 같음) 연산자를 사용하여 데이터베이스에서 레코드를 선택하면 SQLite 데이터베이스는 레코드가 대소문자를 구분합니다.
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교 구현
이러한 상황을 해결하기 위해 SQLite 데이터베이스를 사용하는 다양한 방법이 있습니다.
- 종종
CREATE
또는SELECT
쿼리 문에서collate nocase
절을 사용합니다. - 또 다른 옵션은 문자열 피연산자를 비교할 때 대소문자를 구분하지 않는
LIKE
연산자를 사용하는 것입니다. - 마지막으로 문자열을
=
연산자와 비교할 때 피연산자 양쪽에UPPER()
및LOWER()
함수를 사용합니다.
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해 CREATE
쿼리에서 COLLATE NOCASE
를 사용합니다.
데이터 유형으로 텍스트(문자열)가 추가된 다른 레코드가 있는 데이터베이스가 있다고 가정합니다. 이제 =
연산자를 사용하여 테이블에서 몇 개의 레코드를 선택하려고 합니다. 그러면 데이터베이스는 레코드가 대소문자를 구분함을 보여줍니다.
따라서 일반적으로 SQLite에서는 collate nocase
쿼리로 테이블을 생성할 때 열이 대소문자를 구분하지 않아야 한다고 언급할 수 있습니다. 테이블의 id 또는 인덱스 값으로 collate nocase
를 지정할 수도 있습니다.
아래 예에서 example.New_text
는 대소문자를 구분하지 않습니다.
create table example
(
New_text text collate nocase
);
insert into example values ('ABC');
insert into example values ('def');
insert into example values ('GHI');
create index example_New_text_Index
on example (New_text collate nocase);
example
테이블에 몇 개의 레코드를 생성하고 삽입하면 select
쿼리에서 레코드를 검색하여 대소문자 구분을 테스트할 수 있습니다. 아래 결과는 collate nocase
가 where
절에서 문자열 데이터 유형을 비교하기 위해 대소문자 구분이 필요할 때마다 제대로 작동함을 보여줍니다.
예 1:
SELECT New_Text FROM example WHERE New_Text = 'DEF';
출력:
def
예제 1은 테이블 내부의 대소문자 구분 값을 처리하지 않고 where
절에서 =
연산자를 사용할 때 def
값을 생성합니다. 그 이유는 테이블 생성 시 collate nocase
를 사용하면 New_text
열의 값이 대소문자를 구분하지 않기 때문입니다.
예 2:
SELECT New_Text FROM example ORDER BY New_Text;
출력:
ABC
def
GHI
예 3:
SELECT New_Text FROM example ORDER BY New_Text DESC;
출력:
GHI
def
ABC
SQLite 데이터베이스에서 EXPLAIN
명령 사용
열에 대한 인덱스를 사용하여 대소문자 구분 일치 및 검색을 확인할 수도 있습니다. 이를 위해 EXPLAIN
명령을 사용합니다.
EXPLAIN SELECT New_Text FROM example WHERE New_Text = 'def';
출력:
addr opcode p1 p2
1 Integer 0 0
2 OpenRead 1 3
3 SetNumColumns 1 2
4 String8 0 0
5 IsNull -1 14
6 MakeRecord 1 0
7 MemStore 0 0
8 MoveGe 1 14
9 MemLoad 0 0
10 IdxGE 1 14
11 Column 1 0
12 Callback 1 0
13 Next 1 9
14 Close 1 0
15 Halt 0 0
16 Transaction 0 0
17 VerifyCookie 0 4
18 Goto 0 1
19 Noop 0 0
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해 SELECT
쿼리에서 COLLATE NOCASE
를 사용합니다.
대소문자 구분 문제를 고려하지 않고 collate nocase
절을 사용하지 않고 테이블을 생성한다고 가정합니다. 그런 다음 SELECT
쿼리로 레코드를 검색하는 동안 여전히 collate nocase
절을 사용할 수 있습니다.
이 예에서 collate nocase
절을 SQLite의 SELECT
문과 함께 사용할 수 있음을 알 수 있습니다.
SELECT * FROM NameOfTheTable WHERE value = 'MatchingValue' COLLATE NOCASE
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위한 LIKE
연산자 사용
collate nocase
절과 유사하게 SQLite 데이터베이스에서 문자열 유형의 대소문자를 구분하지 않는 비교를 위해 LIKE
연산자를 사용할 수 있습니다.
LIKE
연산자는 패턴 일치 연산자입니다. 일반적인 연산자와 같이 비교를 위한 왼쪽 및 오른쪽 피연산자가 있습니다.
왼쪽 피연산자는 일치하는 문자열을 포함하고 오른쪽 피연산자는 일치하는 문자열과 일치시킬 패턴을 포함합니다. 이 연산자에는 지정된 문자의 시퀀스 수에 대한 퍼센트 기호 %
도 포함됩니다.
LIKE
연산자도 대소문자를 구분하지 않으므로 일치에 소문자 또는 대문자가 사용되는지 여부는 중요하지 않습니다. ASCII 코드 문자가 아닌 유니코드 문자의 경우에만 대소문자를 구분합니다.
예를 들어 LIKE
연산자에서 ASCII 문자 A
와 a
는 동일하지만 유니코드 문자 Æ
와 æ
는 다릅니다. LIKE
연산자를 사용하여 SQLite 데이터베이스에서 대소문자를 구분하지 않는 레코드를 비교합니다.
SELECT * FROM NameOFTheTable WHERE Value LIKE 'something'
Sqlite3에서 대소문자를 구분하지 않는 문자열 비교를 위해 LOWER()
또는 UPPER()
함수 사용
소문자 값과 대문자 값이 있는 특정 열에 레코드가 있다고 가정합니다. 그러나 SELECT
문에서 =
연산자를 사용하여 값을 비교할 때 결과에 대소문자를 구분하는 문제가 있습니다.
이 문제를 해결하기 위해 SQLite 함수 LOWER()
및 UPPER()
를 구현할 수 있습니다. 여기서 LOWER()
함수는 모든 문자에 대해 소문자이고 UPPER()
함수는 모든 문자에 대해 대문자입니다. 제공된 문자열의. SELECT
문에서 이러한 기능을 사용하여 효과적으로 만듭니다.
아래 예제는 일치하는 문자열이 먼저 LOWER()
함수를 사용하여 소문자로 변환하고 UPPER()
함수를 사용하면 대문자로 변환하는 것을 보여줍니다.
SQLite에서 UPPER()
함수 사용:
SELECT * FROM NameOFTheTable WHERE UPPER(value) = UPPER('something')
SQLite에서 LOWER()
함수 사용:
SELECT * FROM NameOFTheTable WHERE LOWER(value) = LOWER('something')
Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.
LinkedIn