Data type도 어느 정도 설명이 끝났으니 이제 함수 사용법을 익힐 시간이 도래한 것 같습니다. 여러분은 data를 한글로 표기힐 때 '데이터' 라고 표기하나요 아니면 '데이타' 라고 표기하나요. '데이타'라고 발음하면서 굳이 '데이터'라고 쓰는 게 너무 거슬려서 저는 '데이타'라고 쓰는 편인데 이게 맞춤법 검사에서는 '데이터' 로 표시해야 하기 때문에 그냥 data라고 영어로 씁니다. 앞으로 짧은 영어는 그냥 영어로 표시하겠습니다. 함수도 그냥 이하 function으로 표기하겠습니다.
Function은 인자값을 넣거나 혹은 인자값 없이도 결과값을 받을 수 있는 기능을 일컬어 말합니다. 수학시간에 배우신 f(x) = ... 여기에 f가 function 이고 x 가 인자입니다. 아래는 f(x) = x+5 를 그림으로 표현해 봤습니다. 이 function 이름을 plus5() 라고 한다면 SQL 에서는 select plus5(1) from 테이블 이라고 실행하면 결과가 6 이 나오게 되는 겁니다.
DB 마다 function 종류가 꽤 많을 거라고 생각합니다. 개발자도 주력으로 사용하는 것은 몇가지 안될 것입니다. 그래도 어떤 게 필요하다고 생각되면 쉽게 구글링해서 검색해서 찾아냅니다. 그만큼 오픈되어 있고 참고할 곳도 많기 때문에 굳이 다 외울 필요는 없다고 생각합니다. 그래서 제가 많이 쓰는 것 기준으로 설명해 보겠는데, DB마다 같은 기능이지마 function 명과 사용법이 다릅니다. MySQL과 Oracle 문법으로 작성해 보겠습니다.
§ 문자열 function 들
▶ 문자열 연결 - concat(문자열1, 문자열2, ....)
아래 SQL은 문자열 연결에 사용되는 concat() 의 사용법을 예제로 보여 드리고 있습니다. 연결할 문자열 수에 상관없이 콤마로 계속 붙여 쓸 수 있습니다. 그리고 테스트3을 봤을 때 문자와 숫자도 연결해서 문자열로 만들 수 있는 것을 알 수 있습니다. SQL 컬럼에 as 컬럼명으로 해서 제가 지정한 컬럼명으로 보여줄 수 있습니다. 이것을 alias 라고 합니다. Alias는 컬럼 뿐만아니라 테이블명에도 사용할 수 있습니다. 다만 테이블에는 as 를 쓰지 않고 테이블명 다음에 공백을 주고 alias 문자를 씁니다. 이건 SQL 예제 난이도가 높아지면서 자연적으로 알 수 있을 것입니다.
Oracle 에서는 문자열 연결을 || 로 연결해서 사용합니다. 이걸 파이프(pipe) 라고 말하기도 하고 바바(bar bar) 라고 하기도 하더군요.
▶ 문자 자르기 - substr(), substring()
문자열 자르기 위해서 substr()을 사용합니다. MySQL에서 정식은 substring() 이지만 동의어로 substr() 을 사용할 수 있습니다. Oracle에서 워낙 substr()을 많이 써서 synonym을 만들어 둔게 아닐까 싶습니다. 뇌피셜입니다. 쓰는 법은 substr(작업대상 문자열, 시작위치, 몇글자) 입니다. 끝에 몇글자를 생략하면 시작위치부터 끝까지를 결과로 반환합니다. 그리고 시작위치를 음수도 넣을 수 있는데 음수를 넣으면 문자열 끝에서부터 자를 수도 있습니다. 아마 SQL을 사용하게 되면 무궁무진하게 응용하시게 될 겁니다.
▶ 문자 위치 - instr()
특정 문자열의 위치를 찾을 때는 instr(작업대상 문자열, 찾을 문자) 를 사용합니다. 아래 예제를 보면 4가 나옵니다. A문자열의 위치를 1로 보고 위치를 구한 거네요. 코딩을 배우게 되면 첫번째 위치를 1이 아닌 0으로 생각해야 할 경우가 많다보니 instr() 같이 문자열 위치를 찾을 때는 몇번 테스트 후에 개발하게 됩니다. 그리고 아래 예제에 보면 from 테이블이 없죠? MySQL은 dummy 한 건을 보이는 용도로 from 테이블을 생략할 수 있습니다. Oracle 에서는 from dual 이라고 써야 합니다.
응용해서 이런 것도 해볼 수 있습니다. 실제 많이 쓰는 건데요, 알파벳 'D' 이후 문자열을 출력하고 싶을 때 substr() 과 combo로 사용해서 해결할 수 있습니다.
추가로 'D' 부터 'F' 까지 출력도 가능하겠죠.
▶ 문자열 공백제거 - trim(), Ltrim(), rtrim(), replace()
문자열에 공백이 있을 때 공백을 제거해 줘야 할 경우 있습니다. Trim()은 문자열의 시작과 끝에 존재하는 공백을 다 제거합니다. Ltrim()은 완쪽 즉, 문자열 앞 부분에 존재하는 공백만 제거합니다. 뒷편은 공백이 남게됩니다. Rtrim()은 반대로, 오른쪽 공백만 제거합니다. 그리고 글자 중간에 문자열이 있을 때는 trim() 으로 제거 할 수 없기 때문에 문자열을 바꾸는 함수인 replace()를 사용합니다. Replace(작업할 문자열, 바꿀 대상문자, 변경할 문자) 로 사용하는 데 적고 보니 전달이 잘 안될 수도 있겠다는 생각이 듭니다. 작업할 문자열에서 바꿀 대상문자를 찾아서 변경할 문자로 바꾼다는 의미입니다. 아래에 보면 ' '를 찾아서 '' 로 바꾼다는 의미로 결구 공백을 모두 제거한다는 뜻입니다. 이 함수들은 Oracle과 문법이 같습니다.
▶ 문자열 채우기 - LPAD(), RPAD()
문자열을 왼쪽이든 오른쪽이든 채우는 기능입니다. 방향만 Left, Right에 따라 LPAD(), RPAD()로 씁니다. LPAD(작업대상 문자열, 총자리수, 채울 문자) 로 사용합니다. 총자리수보다 작업대상 문자열 수가 작을 때 fuction 명에 따라 왼쪽이든 오른 쪽이든 채울 문자열로 덧붙이는 기능입니다. 채울문자는 단 문자도 되고 2개이상 문자열도 가능합니다.
▶ 대문자, 소문자 바꾸기 - upper(), ucase(), LOWER(), LCASE()
upper()와 ucase()는 대문자로, LOWER()와 LCASE()는 소문자로 바꾸는 겁니다. Oracle이나 일반 코딩에서는 upper(), LOWER()를 씁니다. Basic 프로그래밍에서는 ucase()와 LCASE()를 사용합니다. 엑셀 매크로는 Basic 문법을 씁니다.
이정도로 문자열 가공 function 설명을 마치도록 하겠습니다. 문자 <--변환--> 숫자, 문자 <--변환--> 날짜도 있는데 이건 function 설명 맨 마지막에 하도록 할 테니 꼭 찾아보시길 바랍니다.
수고하셨습니다.
'MySQL' 카테고리의 다른 글
#7 프로그래밍 개발자 교육 - SQL : 함수(function) 사용법 - 날짜/시간 (0) | 2020.05.16 |
---|---|
#6 프로그래밍 개발자 교육 - SQL : 함수(function) 사용법 - 숫자 (0) | 2020.05.14 |
#4 프로그래밍 개발자 교육 - SQL : 데이터 유형 (0) | 2020.05.12 |
#3 프로그래밍 개발자 교육 - SQL : 테이블 join의 유형 (0) | 2020.05.11 |
#2 프로그래밍 개발자 교육 - SQL : 데이터조회하기 (0) | 2020.05.09 |