본문 바로가기

내배캠/TIL

SQL INSTR() 함수

INSTR() 함수

INSTR() 함수는 다른 문자열에서 문자열이 처음 나타나는 위치를 반환한다. 대소문자는 구분하지 않는다. 

 

 

[사용법]

INSTR(string, substring)

- string : 검색 대상이 되는 문자열
- substring : 찾고자 하는 문자열(부분 문자열)

 

[반환값]

substring이 string 내에 존재하면, 그 부분 문자열이 처음으로 나타나는 위치1부터 시작하는 숫자로 변환한다. substring이 string 내에 존재하지 않으면 0을 반환한다.

 

[예시]

SELECT INSTR('Hello, World!', 'World');


이 쿼리는 문자열 "Hello, World!"에서 "World"라는 부분 문자열이 시작하는 위치를 반환한다.

결과는 8인데, "World"는 "H"부터 시작하는 위치를 1로 해서 8번째 문자에서 시작하기 때문이다. 

 

SELECT INSTR('Hello, World!', 'world');


이 함수는 대소문자를 구분하므로 "world"라는 부분 문자열이 "Hello, World!"에 존재하지 않기 때문에 0을 반환한다.

대소문자를 구분하지 않고 검색하려면 LOWER()UPPER() 함수를 사용하여 비교를 수행하면 된다.

 

 

 

 

추가로, 보통의 프로그래밍 언어에서 인덱스가 0부터 시작하는 것과 다르게 SQL에서는 1부터 시작하는 것이 궁금해서 gpt한테 물어봤다. 대답은 다음과 같았다.

 

 

 

<프로그래밍에서 인덱스가 0부터 시작하는 이유>


1. 포인터 산술의 효율성

   - 초기 프로그래밍 언어들, 특히 C와 같은 저수준 언어에서는 배열이 메모리에서 연속된 공간에 저장됩니다. 인덱스 0은 배열의 시작 주소를 나타내며, array[0]은 단순히 배열의 시작 주소를 가리킵니다.


   - 인덱스를 0으로 설정하면 포인터 산술에서 추가적인 계산이 필요 없으며, array[n]을 계산할 때 array의 시작 주소에 n을 더하는 방식으로 접근이 가능합니다. 이는 메모리 접근과 관련된 연산을 간단하고 빠르게 만듭니다.

 


2. 수학적 일관성
   - 수학에서 많은 경우, 인덱스는 0부터 시작하는 것이 자연스럽습니다. 예를 들어, 함수의 정의역이나 이산 수학의 경우 인덱스를 0부터 시작하는 것이 표준인 경우가 많습니다.


   - 컴퓨터 과학에서 사용하는 많은 알고리즘과 수학적 개념은 이러한 수학적 전통을 따릅니다.

 


3. 전통적인 설계 선택
   - 초기 컴퓨터 과학에서 주요한 언어였던 C 언어는 0 기반 인덱싱을 사용했고, 이후의 많은 언어들이 이 전통을 따랐습니다.

 


<SQL에서 인덱스가 1부터 시작하는 이유>

 

1. 비기술적 사용자 대상
   - SQL은 데이터베이스 관리를 위한 언어로, 많은 사용자들이 직접 데이터베이스를 다루기 때문에 프로그래머가 아닌 비기술적 사용자도 이해할 수 있도록 설계되었습니다.


   - 이러한 사용자들은 직관적으로 첫 번째 항목을 1로 인식하기 때문에, SQL에서는 1부터 인덱스를 시작하는 것이 더 사용자 친화적이라고 여겨집니다.

 


2. 비즈니스 로직과의 일관성
   - 많은 비즈니스 상황에서 첫 번째 요소는 1부터 시작하는 것이 자연스럽습니다. 예를 들어, "첫 번째 고객", "첫 번째 주문" 등의 비즈니스 용어는 일반적으로 1부터 시작합니다.


   - SQL은 이러한 비즈니스 로직과 더 일관되게 동작하도록 1 기반 인덱스를 채택했습니다.

 


3. 역사적 이유
   - SQL은 수학적이나 컴퓨터 과학적인 전통보다 비즈니스 데이터 처리에 중점을 두고 발전해왔습니다. SQL을 설계한 사람들은 대부분의 사용자가 비즈니스 분석가나 데이터 관리자라는 점을 염두에 두었고, 이들에게 익숙한 1 기반 인덱스를 채택한 것입니다.

 


<결론>
프로그래밍 언어와 SQL은 서로 다른 목적으로 설계되었기 때문에 인덱싱 방법이 다릅니다. 프로그래밍 언어는 메모리 효율성과 수학적 일관성을 중시하며 0 기반 인덱스를 선택했고, SQL은 사용자 친화성 및 비즈니스 로직과의 일관성을 중시하여 1 기반 인덱스를 선택한 것입니다.

 

 

 

 

흥미롭다.

 

 

[참고 자료]

https://ko.w3hmong.com/mysql/func_mysql_instr.htm

 

MySQL INSTR() 함수

MySQL INSTR() 함수 ❮ MySQL 기능 예시 문자열 "W3Schools.com"에서 "3"을 검색하고 위치를 반환합니다. SELECT INSTR("W3Schools.com", "3") AS MatchPosition; 정의 및 사용 INSTR() 함수는 다른 문자열에서 문자열이 처음

ko.w3hmong.com

 

'내배캠 > TIL' 카테고리의 다른 글

WAS  (0) 2024.08.17
SQL 다중 조인  (0) 2024.08.15
예외 처리  (0) 2024.08.13
IoC와 DI  (2) 2024.08.12
오브젝트와 의존관계  (0) 2024.08.09