[MySQL] 함수

2006/09/08 10:44

숫자 관련 함수
▶ ABS(숫자) : 절대값 출력.
   select abs(123);
▶ CEILING(숫자) : 값보다 큰 정수 중 가장 작은 수.
  --양수일 경우는 소숫점 자리에서 무조건 반올림(4.0과 같은 소숫점 자리 0 값은 제외)
  --음수일 경우는 소숫점 자리를 무조건 버림
   select ceiling(4.0);
   select ceiling(4.1);
   select ceiling(4.9);
▶ FLOOR(숫자) : 값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)].
  --음수일 경우는 [.0/.00/.000/...] 을 제외하고 무조건 소숫점을 버리고 반내림(?)
   select floor(4.0);
   select floor(4.1);
   select floor(4.9);
   select floor(-4.6789);
▶ ROUND(숫자,자릿수) : 숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.)
   --자릿수를 생략하면 소숫점이 5 이상일 때 반올림/자릿수를 지정하면 지정한 자리수에서 반올림
   select round(4.5);
   select round(4.55);
   select round(-4.5);
   select round(4.556);
   select round(4.556,0);
   select round(4.556,1);
   select round(4.556,2);
   select round(45.556,-1);
   select round(455.556,-2);
▶ TRUNCATE(숫자,자릿수) : 숫자를 소수점 이하 자릿수에서 버림.
  ==>만일 자릿수를 소숫점 이전으로 정하면 소숫점이하는 버리고 나머지 값은 0 값으로 처리
     / 예) truncate(9999,-3) --> 9000
  ==>또는 자릿수를 소숫점이하로 정하며, 해당숫자가 자릿수보다 소숫점이 모자랄경우 0 값으로 대치
     / 예) truncate(999,3) --> 999.000
  --반드시 자릿수를 명시해주어야 한다
  --음수일 경우는 해당자릿수에서 소숫점을 버리면서 무조건 반올림
  ==>(자릿수 숫자에서 이후 숫자가 0 일 경우는 제외 / 예)-4.0,0/-400,-2/-4.1230,4)
  ==>음수 역시 자릿수를 소숫점이하로 정하며, 해당숫자가 자릿수보다 소숫점이 모자랄경우 0 값으로 대치
  ==>또한 자릿수를 소숫점 이전으로 정하면 소숫점이하는 버리고 나머지 값은 역시 0 값으로 처리
▶ POW(X,Y) 또는 POWER(X,Y) : X의 Y승
  --소숫점이 있는 경우도 실행, 단 음수는 양수로 승처리
  select pow(-2.5,2);
  select pow(1.5,2);
▶ MOD (분자, 분모) : 분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음)
  select mod(12,5);    ==> 2
  select 12%5;           ==> 2
▶ GREATEST(숫자1,숫자2,숫자3...) : 주어진 수 중 제일 큰 수 리턴.
  select greatest(100,101,90);
▶ LEAST(숫자1,숫자2,숫자3...) : 주어진 수 중 제일 작은 수 리턴.
  select least(100,101,90);
▶ INTERVAL(a,b,c,d.....) : a(숫자)의 위치 반환
  --두 번째 이후는 오름차순 정렬이 되어야 함
  예) INTERVAL(5,2,4,6,8) ==> 2
       5는 4와 6사이에 존재, 4~6사이의 위치가 앞에서 2번째
  select interval(4,1,2,3,5,6);
문자 관련 함수
▶ ASCII(문자) : 문자의 아스키 코드값 리턴.
  SELECT ASCII('문자');
  select ascii('A');
▶ CONCAT('문자열1','문자열2','문자열3'...) : 문자열들을 이어준다.
  select concat('ASP,','PHP,','SQL',' WEB STUDY');
▶ INSERT('문자열','시작위치','길이','새로운문자열') : 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치
  '시작위치' 와 '길이'는 문자열이 아니므로 작은따옴표로 굳이 묶어주지 않아도 된다.
  select insert('MySql web study','7','3','offline');
  select insert('MySql web study',7,3,'offline');
▶ REPLACE('문자열','기존문자열','바뀔문자열') : 문자열 중 기존문자열을 바뀔 문자열로 바꾼다.
  select replace('MySql web study','web','offline');
▶ INSTR('문자열','찾는문자열') : 문자열 중 찾는 문자열의 위치값을 출력
  --값이 존재하지 않으면 0값 리턴
  select instr('MySql web study','s');
  select instr('MySql web study','S');
▶ LEFT('문자열',개수) : 문자열 중 왼쪽에서 개수만큼을 추출.
  select left('MySql web study',5);
  select left('MySql web study','5');
▶ RIGHT('문자열',개수) : 문자열 중 오른쪽에서 개수만큼을 추출.
  select right('MySql web study',5);
  select right('MySql web study','5');
▶ MID('문자열',시작위치,개수) : 문자열 중 시작위치부터 개수만큼 출력
  select mid('MySql web study',7,3);
  select mid('MySql web study','7','3');
▶ SUBSTRING('문자열',시작위치,개수) : 문자열 중 시작위치부터 개수만큼 출력
  select substring('Mysql web study',11,5);
  select substring('Mysql web study','11','5');
▶ LTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.
  select ltrim('          web study');
▶ RTRIM('문자열') : 문자열 중 오른쪽의 공백을 없앤다.
  select rtrim('web study          ');
▶ TRIM('문자열') : 양쪽 모두의 공백을 없앤다.
  select trim('     web study      ');
▶ LCASE('문자열') 또는 LOWER('문자열') : 소문자로 바꾼다.
  select lcase('MYSQL');
  select lower('MySQL');
▶ UCASE('문자열') 또는 UPPER('문자열') : 대문자로 바꾼다.
  select ucase('mySql');
  select upper('mysql');
▶ REVERSE('문자열') : 문자열을 반대로 나열한다.
  예) REVERSE('abcde') ==> edcba
  select reverse('lqSyM');
논리 관련 함수, 집계함수
--논리 관련 함수
☞ IF(논리식,참일 때 값,거짓일 때 값)
  논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다.
☞ IFNULL(값1,값2)
값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력

--집계 함수
☞ COUNT(필드명)
  NULL 값이 아닌 레코드 수를 구한다.
☞ SUM(필드명)
  필드명의 합계를 구한다.
☞ AVG(필드명)
  각각의 그룹 안에서 필드명의 평균값을 구한다.
☞ MAX(필드명)
  최대값을 구한다.
☞ MIN(필드명)
  최소값을 구한다.
날짜 관련 함수
▶ NOW() 또는 SYSDATE() 또는 CURRENT_TIMESTAMP()
  현재 날짜와 시간 출력
  ※ 함수의 상황이 숫자인지 문자열인지에 따라
     YYYYMMDDHHMMSS 또는
     'YYYY-MM-DD HH:MM:SS' 형식으로 반환한다.
  예)
  select now();
  ==> '2001-05-07 09:10:10'
  select now() + 0;
  ==> 20010507091010
▶ CURDATE() 또는 CURRENT_DATE()
  현재 날짜 출력
  ※ 함수의 상황이 숫자인지 문자열인지에 따라
     YYYYMMDD 또는
     'YYYY-MM-DD 형식으로 반환한다.
  예)
  select curdate();
  ==> '2001-05-07'
  select curdate() + 0;
  ==> 20010507
▶ CURTIME() 또는 CURRENT_TIME()
  현재 시간 출력
  ※ 함수의 상황이 숫자인지 문자열인지에 따라
  HHMMSS 또는 'HH:MM:SS' 형식으로 반환한다.
  예)
  select curtime();
  ==> '09:10:10'
  select curtime() + 0;
  ==> 091010
▶ DATE_ADD(날짜,INTERVAL 기준값)
  날짜에서 기준값 만큼 더한다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
  예)
  select date_add(now(), interval 2 day);
  ==> 오늘보다 2일 후의 날짜와 시간 출력.
  select date_add(curdate(), interval 2 day);
  ==> 오늘보다 2일 후의 날짜 출력.
▶ DATE_SUB(날짜,INTERVAL 기준값)
  날짜에서 기준값 만큼 뺸다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
  select date_sub(now(),interval 2 day);
  ==> 오늘보다 2일 전의 날짜와 시간 출력.
  select date_sub(curdate(), interval 2 day);
  ==> 오늘보다 2일 전의 날짜 출력.
▶ YEAR(날짜) : 날짜의 연도 출력.
  select year('20000101');
  select year(20000101);
  select year('2000-01-01');
  select year(now());
  select year(curdate());
  select year(date_add(now(),interval 2 year));
  select year(date_sub(curdate(),interval 2 year));

▶ MONTH(날짜) : 날짜의 월 출력.
  select month('20001231');
  select month(20001231);
  select month('2000-12-31');
  select month(now());
  select month(curdate());
  select month(date_add(now(),interval 2 month));
  select month(date_sub(curdate(),interval 2 month));

▶ MONTHNAME(날짜) : 날짜의 월을 영어로 출력.
  select monthname(20021221);
  select monthname('20000721');
  select monthname('2000-08-10');
  select monthname(now());
  select monthname(curdate());
  select monthname(date_add(now(),interval 17 month));
  select monthname(date_sub(curdate(),interval 11 month));

▶ DAYNAME(날짜) : 날짜의 요일일 영어로 출력.
  select dayname(20000121);
  select dayname('20010123');
  select dayname('2001-06-22');
  select dayname(now());
  select dayname(curdate());
  select dayname(date_add(now(),interval 21 day));
  select dayname(date_sub(curdate(),interval 333 day));

▶ DAYOFMONTH(날짜) : 날짜의 월별 일자 출력.
  select dayofmonth(20030112);
  select dayofmonth('20011231');
  select dayofmonth('2001-12-23');
  select dayofmonth(now());
  select dayofmonth(curdate());
  select dayofmonth(date_add(now(),interval 56 day));
  select dayofmonth(date_sub(curdate(),interval 33 day));

▶ DAYOFWEEK(날짜) : 날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
  select dayofweek(20011209);
  select dayofweek('20001212');
  select dayofweek('2003-03-21');
  select dayofweek(now());
  select dayofweek(curdate());
  select dayofweek(date_add(now(),interval 23 day));
  select dayofweek(date_sub(curdate(),interval 31 day));

▶ WEEKDAY(날짜) : 날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
  select weekday(20000101);
  select weekday('20030223');
  select weekday('2002-10-26');
  select weekday(now());
  select weekday(curdate());
  select weekday(date_add(now(),interval 23 day));
  select weekday(date_sub(curdate(),interval 33 day));

▶ DAYOFYEAR(날짜) : 일년을 기준으로 한 날짜까지의 날 수.
  select dayofyear(20020724);
  select dayofyear('20001231');
  select dayofyear('2002-01-01');
  select dayofyear(now());
  select dayofyear(curdate());
  select dayofyear(date_add(curdate(),interval 44 year));
  select dayofyear(date_sub(now(),interval 25 month));
  select dayofyear(date_add(now(),interval 55 day));
  select dayofyear(date_sub(curdate(),interval 777 hour));
  select dayofyear(date_add(now(),interval 999999 minute));

▶ WEEK(날짜) : 일년 중 몇 번쨰 주.
  select week(now());
  select week(date_sub(curdate(),interval 12 month));

▶ FROM_DAYS(날 수)
  --00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력.
     ※ 날 수는 366 이상을 입력 그 이하는 무조건 '0000-00-00' 으로 출력.
  --또한 9999-12-31 [from_days(3652424)] 까지의 날짜가 출력가능 하다고는 하나
     정확히 말하면 0000-03-15 [from_days(3652499)] 까지의 날짜가 출력가능함.
  --따라서 날 수는 366 이상 3652424[3652499] 이하가 되어야 한다.
  select from_days(3652424);
  select from_days('3652499');

▶ TO_DAYS(날짜)
  --00 년 00 월 00일 부터 날짜까지의 일자 수 출력.
  --from_days와 비교해 볼 때 정확한 날짜범위는 3652424 일 수 까지임을 알 수 있다.
  select to_days('99991231');
  select to_days('0000-03-15');
  응용 예제1) 자신이 살아 온 날수
  select to_days(now()) - to_days('본인생일자');
  select to_days(now()) - to_days('1970-10-10');
  응용 예제2) 살아 온 날수를 이용하여 자신의 나이를 만으로 구하기
  select (to_days(now())-to_days('1970-10-10'))/365;
  select floor((to_days(now())-to_days('19701010'))/365);

▶ DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력
DATE타입구분기호설명구분기호설명
년도%Y4자리 연도%y2자리 년도
월%M
%b
긴 월 이름 (January, ...)
짧은 월 이름(Jan, ...)
%m
%c
숫자의 월 (01...12)
숫자의 월 (1...12)
요일%W긴 요일 이름 (Sunday, ...)%a짧은 요일 이름 (Sun, ...)
일%D
%w
월 내에서 서수 형식의 일(1th, ...)
숫자의 요일 (0=Sunday, ...)
%d
%e
%j
월 내의 일자 (01...31)
월 내의 일자 (1...31)
일년 중의 날수 (001...366)
시%l
%h
%I
12시간제의 시 (1...12)
12시간제의 시 (01...12)
12시간제의 시 (01...12)
%k
%H
12시간제의 시 (0...23)
12시간제의 시 (00...23)
분%i숫자의 분 (00...59)
초%S숫자의 초 (00...59)%s숫자의 초 (00...59)
시간%r12시간제의 시간 (hh:mm:ss AM 또는 PM)%T24시간제의 시간 (hh:mm:ss)
주%U일요일을 기준으로 한 주 (0...52)%u월요일을 기준으로 한 주 (0...52)
기타%%문자 '%'%pAM 또는 PM

  ☞ 예)
  select date_format(now(),'%Y:%M:%p');
  ==> 2001:May:PM

▶ DATABASE() : 현재의 데이터베이스 이름을 출력한다.

▶ PASSWORD('문자열')
: 문자열을 암호화한다.

▶ FORMAT(숫자,소수이하자리수) : 숫자를 #,###,###.## 형식으로 출력
  --임의의 소수점자릿수를 생성한다./소숫점을 필요한 만큼 취한다.
  --소숫점을 만들어 같은 길이로 한다음 동일하게 프로그램에서 불러와서 소숫점을 버리고
     필요한 곳에 출력하는 등에 응용할 수 있다.
  select format(123,5);
  select format(123.12345600123,9);
  select format(123.123,-3);
  ※ 소숫점이하자리수가 0 이나 음수값은 해당이 안됨