안녕하세요. chogahui05입니다. 문자열을 다루는 함수 중에, left, right, mid 함수가 있습니다. 어디서 많이 들어본 함수 같은데. 사실 엑셀에도 떡하니 있는 함수들입니다. 텍스트를 자른다. 아니면 추출하는 것들로 매우 잘 알려져 있습니다. 물론, LIKE '%~'나, LIKE '~%'의 대용으로도 써먹을 수 있기도 합니다.

 

 


 먼저 기억해 두셔야 할 것이 있습니다. MYSQL에서, 문자열의 인덱스는 0부터가 아닌, 1부터 시작한다는 것입니다. 헷갈릴 수 있으니, 이것 먼저 기억해 두시는 게 좋겠습니다.

 

 

 먼저 LEFT입니다. 문자열과, 가장 왼쪽에 있는 것 부터 몇 개나 꺼내올 건지를 받습니다. 말 그대로 왼쪽에서부터 3개를 꺼내오기 때문에, 결과는 'abc'가 리턴이 됩니다. 예를 들어 'chokw'를 1번째 인자로 주고, 3을 2번째 인자로 주었다면, 'cho'가 리턴이 될 거에요.

 

 

 'abcdefg'에서 3개를 꺼내온 결과는 'abc'입니다. 엑셀에도 있는 함수이니 익숙하시리라 생각이 됩니다.

 

 

 그러면 right는 무엇일까요? 끝에서 n개의 문자를 보는 겁니다. 예를 들어 right('abcdefg',4)가 들어오면, 'abcdefg'의 끝 4개의 문자를 뽑아서 그 결과를 돌려줍니다.

 

 

 당연하게도, 결과는 4가 나옵니다. 1번째 인자를 'chogahui', 2번째 인자를 5로 주면, 'gahui'가 나오겠네요.

 

 

 mid 함수는 2번째 인자로 시작 위치를, 3번째 인자로 몇 개나 가져올 것인지를 받습니다. 'abcdefg'에서, 2번째 위치에 있는 'b'부터 3개를 가져오라는 의미네요. 따라서, 'bcd'가 출력이 될 거에요. 정말 그런지 볼까요?

 

 

 네. 정말 그렇습니다. 2번째 parameter가 음수가 될 수도 있는데요.

 

 

 예를 들어서 'chogahui05'가 있다고 해 봅시다. 2번째 인자가 -7인데요. 문자열의 끝을 기준점으로 보았을 때, 왼쪽으로 7칸 이동한 위치를 의미합니다. '5'는 왼쪽으로 1칸 이동한 거고요. 7칸 이동한 것은 'g'네요. 여기서부터 5개의 문자를 출력해야 하니까, 'gahui'가 되겠네요.

 

 

 결과는 'gahui'입니다. 오늘 배운 세 함수를 잘 활용하면 LIKE 연산자를 대체할 수 있는데요. '%..'나 '..%'는 left나 right가 하는 일과 정확히 같기 때문에, 이 둘로 충분히 대체 가능합니다. 전자는 ..로 끝나는지를, 후자는 ..로 시작하는지를 나타내는데요. '..' 부분의 길이만 안다면, 대체할 수 있습니다.

 

 

 '%..%' 패턴은 어떠한 문자열이 ..을 부분 문자열을 가지는가? 로 환원이 가능합니다. 즉, substr과 같은 함수를 쓸 수 있습니다.

 

 


 먼저, 이 쿼리의 의미를 봅시다. city의 Name 필드가 Ka로 시작하는 레코드를 모두 출력하라는 겁니다. 그런데, 이것은 정확하게, left(Name,2) = 'Ka'인지 보면 됩니다.

 

 

 이렇게 쓰시면 되겠네요.

 

 

 그러면 이 쿼리는 어떨까요? an으로 끝나는 패턴을 찾고 있는데요. 이는, 오른쪽에서 2개를 뽑은 것이 'an'과 같느냐와 정확히 똑같은 질문입니다.

 

 

 따라서, right(Name,2) = 'an' 으로 다시 쓸 수 있습니다.