IT수업/데이터베이스

it 수업 6주차 (17) 내장 함수

워제하 2024. 2. 1. 13:34

 

Concat(), Concat_ws() : 두 개 이상의 문자열을 결합한다.

 

select concat('hello','-','world');

 

select concat('hello','-','world',5,6);

 

 

select concat_ws("-",'hello','world',5,6);

 

 

 

 

SubString(), SubString_index(): 문자 잘라내기

 

select substring("HELLO WORLD",6); 는 6번째 index부터 마지막 index까지 잘라내는 것이다.

 

select substring("HELLO WORLD",1,7); 는 1번째 index부터 7번째 index까지 잘라낸다.

 

● Substring_index : 찾는 문자열이 n번째 등장하면 그 뒤 문자열부터는 버려짐

select substring_index(문자열, 찾는 문자열, n번째);

 

select substring_index("HELLO MY NAME IS JUNG"," ",3); 이 문장은 공백을 찾는데 3번쨰 공백부터는 버린다는 것이다.

 

 

이번에는 select userid, substring_index(mdate,'-',2) as'가입연월' from usertbl; 를 해볼 것 이다.

 

 

 

length() : 문자열 길이 값 출력

 

select length("HelloWorld");

 

select length("Hello World"); 띄어쓰기도 하나의 길이로 인정된다.

 

 

 

Lower() : 문자열을 모두 소문자로 변환

   Uppder() : 문자열을 모두 대문자로 변환

 

 

Trim() : 앞, 뒤 공백 제거

 

 

 

Replace( str, old_str, new_str ) : 문자열에서 old_str을 new_str로 대체

select replace("hello i have a dog", "dog", "cat"); 으로 dog를 cat으로 변환 시켰다.

 

 

 

INSTR(str, substr) : 문자열에서 substr이 처음 나타나는 위치를 반환

select instr("bowwow bowwow","wow"); 4번째부터 wow가 시작됐기 때문에 4가 출력되었다.

 

 

 

LPAD, RPAD(str, len, pad_str) : 문자열을 왼쪽, 오른쪽으로 패딩

 

select lpad("abc",7,"0"); 하면 7자리 글자에서 abc를 끝에 입력시키고 남은 자리에는 0으로 채운다.

 

select rpad("abc",7,"0"); 하면 7자리 글자에서 abc를 앞에 입력시키고 남은 자리에는 0으로 채운다.

 

 

 

LEFT, RIGHT(str, len) : 문자열에서 왼쪽 또는 오른쪽에서 길이만큼 추출

 

select left("abcdefg",3); 하면 앞에서 3개의 문자까지 출력된다.

 

select right("abcdefg",3); 하면 뒤에서 3개의 문자까지 출력된다.

 

 

 

MID(str, pos, len) : 문자열에서 특정 시작점에서의 길이만큼을 추출

 

select mid("abcdefg",4,2); 하면 4번쨰 문자에서부터 2개의 문자를 출력하는 것이다.

 

 

 

BIN, OCT, HEX : 각각 2진수, 8진수, 16진수 값을 반환

 

select bin(2); 숫자2를 2진수로 바꾸면 10로 되므로 10이 출력

 

 

 

 

REVERSE(str) : 주어진 문자열을 거꾸로 반환

 

select reverse("12345"); 하면 문자열이 거꾸로 반환된다.

 

 

 

SPACE(len) : 길이만큼의 공백을 반환

 

select concat("HELLO", space(5), "WORLD"); 하면 5개의 공백만큼이 들어가게 된다.

 

 

 

REPEAT(str, len) : 문자열을 주어진 횟수만큼 반복

 

select repeat("hello",3); 하면 주어진 문자열인 hello를 3번 반복한다.

 

 

 

LOCATE(substr, str, [pos]) : 첫번째로 발견한 문자열의 위치를 반환

 

select locate("ef","abcdefg"); 하면 ef가 시작되는 문자의 위치를 출력한다.

 

select position("ef" in "abcdefg"); 와 위에서 보았던 instr를 사용한 select instr("abcdefg", "ef"); 모두 같은 값이 나온다.

여기서 instr는 파라미터 순서만 바꾸면 된다.

 

locate로는 시작지점을 설정할 수 있는데

select locate("ef", "abcdefgabcdefg",6); 하면 6번째부터 'ef'를 찾고 처음 발견한 'ef'의 위치를 반환하는 것이다.

 

 

 

 

 

FORMAT(x, d) : 세자리 수 마다 콤마를 넣고 주어진 길이만큼 소수점을 소수점을 남김  

                              화폐단위를 나타내기 좋을 것 같다.

 

select format(1231233.123,6); 는 정수부분의 세자리마다 ','를 넣어 '1,231,233' 이되고 소수점 뒤는 6자리를 채우는데 입력한 값 외의 나머지 값에는 0을 넣어 6자리를 채운다. '.123000'

 

 

 

 

 

< 날짜, 시간 관련 함수 >

 

- 날짜

 

select mDate from usertbl; mdate열의 값을 출력한 것이다.

 

select Year(mdate) from usertbl; mdate열의 연도만 출력한다.

 

select Month(mdate) from usertbl; mdate열의 월만 출력한다.

 

select Day(mdate) from usertbl; mdate열의 일만 출력한다.

 

 

 

- 시간

 

select now(); 현재 날짜와 시간을 출력한다.

 

select date(now()); 현재 날짜만 출력한다.

 

select curdate(); 역시 현재 날짜만 출력한다.

 

select time(now()); 현재 시간만 출력한다.

 

select curtime(); 역시 현재 시간만 출력한다.

 

 

 

 

< 연습문제>

 

 

select concat(replace(curdate(), '-','#'),"-", replace(curtime(),':','|'));

 

 

 

 

 

 

 

 

참고 : https://velog.io/@wngud4950/MySQL-%EB%82%B4%EC%9E%A5%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC