티스토리 뷰

데이타베이스/Mysql

Mysql 주요함수

프링글 2008. 6. 22. 14:49
mysql의 주요 함수

참조 : http://dev.mysql.com/doc/mysql/en/functions.html


여기서는 mysql의 주요 함수에 대해서 설명한다. 지면관계 상 모든 함수를 설명하지는 못했으며 기초적인 함수와 중요함수 위주로 설명했다. 또한 mysql은 개발 속도가 비교적 빠른 데이터베이스 이므로 가능한 매뉴얼을 참고하는 것이 바람직하다.

편의를 위해 각 함수의 결과는 간략하게 표현했다.

예를 들어 다음 문장의 실행 결과를

mysql> select mod(29,9);

1 rows in set (0.00 sec)

+-----------+

| mod(29,9) |

+-----------+

| 2 |

+-----------+


아래와 같이 표현했다.

mysql> select mod(29,9);

-> 2


1) 그룹함수(grouping functions)

( ... )
괄호 . 연산의 순서를 명확하게 하기 위해 사용된다

mysql> select 1+2*3;

-> 7

mysql> select (1+2)*3;

-> 9


2) 일반적인 산술 연산자
일반적인 연산자들이 그대로 사용된다. 연산에 사용되는 숫자가 모두 정수일 경우 -, + , * 연산의 결과 값은 bigint (64bit)로 표현된다.
+더하기

mysql> select 3+5;

-> 8

-
빼기
mysql> select 3-5;

-> -2

*

곱하기

mysql> select 3*5;

-> 15

mysql> select 18014398509481984*18014398509481984.0;

-> 324518553658426726783156020576256.0

mysql> select 18014398509481984*18014398509481984;

-> 0


두 번째 식의 결과값은 제대로 나오지 않았는데 그 이유는 정수형 곱셈의 결과 값이 bigint 형이 나타낼 수 있는64비트의 범위를 초과 했기 때문이다.


/
나누기

mysql> select 3/5;

-> 0.60

0으로 나누는 경우 결과는 null 이다.

mysql> select 102/(1-1);

-> null



3) 논리 연산


모든 논리 연산의 결과값은 1 (true,참) 또는 0 (false,거짓) 중의 하나이다..


not

!
부정. not 은 1 이면 0을 0이면 1을 리턴한다.

예외: not null 의 경우는 null을 리턴

mysql> select not 1;

-> 0

mysql> select not null;

-> null

mysql> select ! (1+1);

-> 0

mysql> select ! 1+1;

-> 1


마지막 예의 경우는 (!1)+1의 순서로 해석되므로 1이 된다.


or

||
또는. 인수 모두 0 이거나 null 이 아니면 1을 리턴

mysql> select 1 || 0;

-> 1

mysql> select 0 || 0;

-> 0

mysql> select 1 || null;

-> 1



and

&&
그리고. 인수중 하나라도 0 또는 null이면 0 을, 아니면1을 리턴.

mysql> select 1 && null;

-> 0

mysql> select 1 && 0;
-> 0



4) 비교 연산자
모든 비교 연산의 결과값은 1 (true,참) 또는 0 (false,거짓) 중의 하나이다..

아래의 함수들은 문자열 혹은 숫자 열에 사용될 수 있으며 필요에 따라 perl 언어에서와 마찬가지로 문자열은 숫자 열로 또는 숫자 열이 문자열로 바뀐다


mysql은 다음의 규칙에 따라 비교 연산을 수행한다


- 인수가 모두null 이면 비교연산의 결과도 null이다.

- 인수가 모두 문자열이면, 문자열로 비교된다.

- 인수가 모두 정수이면 정수로 비교된다.

- 한쪽 인수가 timestamp 또는 datetime 타입이고 다른 쪽이 숫자이면 timestamp 또는 datetime으로 변화되어 비교된다.

- 그 밖의 모든 경우에는 부동소수점 실수로 비교된다.


=
같다

mysql> select 1 = 0;

-> 0

mysql> select '0' = 0;

-> 1

mysql> select '0.0' = 0;

-> 1

mysql> select '0.01' = 0;

-> 0

mysql> select '.01' = 0.01;

-> 1
<>
!=
같지 않다.

mysql> select '.01' <> '0.01';

-> 1

mysql> select .01 <> '0.01';

-> 0

mysql> select 'zapp' <> 'zappp';

-> 1
<=

작거나 같다.

mysql> select 0.1 <= 2;

-> 1

<
작다

mysql> select 2 <= 2;

-> 1

>=
크거나 같다

mysql> select 2 >= 2;

-> 1

>
크다

mysql> select 2 > 2;

-> 0

<=>
한쪽이 null 인 경우에만 0

mysql> select 1 <=> 1, null <=> null, 1<=> null;

-> 1 1 0

isnull(expr)

만일 표현식expr이 null 이면 1을 그렇지않으면 0을 리턴한다.

mysql> select isnull(1+1);

-> 0

mysql> select isnull(1/0);

-> 1

※ 주의 =을 이용하여 null 값을 비교하면 항상 0 이 리턴 되므로 isnull() 함수를 이용해야 한다


expr between min and max


만일 표현식expr 이 min과 max 값 사이에 존재한다면 1을 그렇지 않으면 0을 리턴한다, expr 이 문자열인지 숫자인지에 따라 비교 방법이 결정된다.

mysql> select 1 between 2 and 3;

-> 0

mysql> select 'b' between 'a' and 'c';

-> 1

mysql> select 2 between 2 and '3';

-> 1

mysql> select 2 between 2 and 'x-3';

-> 0
expr in (value,...)



만일 표현식 expr 이 괄호 안의 목록에 존재하면 1 아니면 0을 리턴한다.

mysql> select 2 in (0,3,5,'wefwf');

-> 0

mysql> select 'wefwf' in (0,3,5,'wefwf');

-> 1



5) 문자열 비교 함수
like
where 조건 절에서 like 에서는 다음 2가지의 와일드카드 문자(wildcard characters)를 쓸 수 있다.

%
0 또는 하나 이상의 문자에 해당한다.
_
하나의 문자에 해당한다

mysql> select 'david!' like 'david_';

-> 1

mysql> select 'david!' like '%d%v%';

-> 1

mysql> select 'david!' like 'david-';

-> 0

mysql> select 'david_' like 'david-';

-> 1

ansi sql과 달리 확장 기능으로 수치 표현식에도 like 를 사용할 수 있다.

mysql> select 10 like '1%';

-> 1


6) 형 변환 연산자

binary
binary연산자는 다음에 따라오는 문자열을 바이너리 문자열로 바꿔서 연산한다. 바이너리 문자열의 큰 특징은 바로 대소문자를 구별한다는 것이다. 컬럼 자체가 바이너리 문자열로 정의 되어 있지 않더라도 대소문자를 구분해 문자열을 비교해야 할 경우 사용된다.

mysql> select "a" = "a";

-> 1

mysql> select binary "a" = "a";

-> 0


binary 는 mysql 3.23.0 에 새롭게 추가된 함수 이다.


7) 흐름 제어(control flow) 함수


ifnull(expr1,expr2)
만일 expr1 이 null 이 아닐 경우 ifnull() 함수는 expr1 자체의 값을 리턴하고 그렇지 않을 경우 expr2을 리턴한다.

mysql> select ifnull(1,0);

-> 1

mysql> select ifnull(0,10);

-> 0

mysql> select ifnull(1/0,10);

-> 10

mysql> select ifnull(1/0,'yes');

-> 'yes'


위의 두 번째 보기에서 엄연히 0은 null 과는 다르다는 점에 주의하자.

if(expr1,expr2,expr3)


만일 expr1 이 참이면 expr2를 리턴하고 그렇지 않으면 expr3을 리턴하다.

mysql> select if(1>2,2,3);

-> 3

mysql> select if(1<2,'yes','no');

-> 'yes'

mysql> select if(strcmp('test','test1'),'yes','no');

-> 'no'



8) 수학 함수
모든 수학 함수는 오류가 생기면 null 을 리턴한다.

-

음수 부호 숫자의 부호를 바꾼다.

mysql> select - 2;

-> -2

abs(x)


x의 절대값을 구한다.

mysql> select abs(2);

-> 2

mysql> select abs(-32);

-> 32


sign(x)
x 의 부호에 따라 음수일 경우 -1, 0 일 경우 0, 양수일 경우 1을 리턴한다.

mysql> select sign(-32);

-> -1

mysql> select sign(0);

-> 0

mysql> select sign(234);

-> 1

mod(n,m)

%


나머지 연산자 n 을 m으로 나눈 나머지를 구한다

mysql> select mod(234, 10);

-> 4

mysql> select 253 % 7;

-> 1

mysql> select mod(29,9);

-> 2


floor(x)
x보다 크지 않은 최대 정수를 구한다.

mysql> select floor(1.23);

-> 1

mysql> select floor(-1.23);

-> -2


ceiling(x)
x 보다 작지않은 최소 정수를 구한다.

mysql> select ceiling(1.23);

-> 2

mysql> select ceiling(-1.23);

-> -1


round(x)
x 의 반올림 값을 구한다

mysql> select round(-1.23);

-> -1

mysql> select round(-1.58);

-> -2

mysql> select round(1.58);

-> 2


round(x,d)
x 를 반올림해서 소수점아래 d 자리까지 구한다. 만일 d 가 0 이면 소수점 아래부분을 생략된다.

mysql> select round(1.298, 1);

-> 1.3

mysql> select round(1.298, 0);

-> 1


exp(x)
e^x 값을 구한다.

mysql> select exp(2);

-> 2.389056

mysql> select exp(-2);

-> 0.135335


log(x)
자연로그 값을 구한다.

mysql> select log(2);

-> 0.693147

mysql> select log(-2);

-> null

if you want the log of a number x to some arbitary base b, use the formula log(x)/log(b).


log10(x)
상용로그 값을 구한다

mysql> select log10(2);

-> 0.301030

mysql> select log10(100);

-> 2.000000

mysql> select log10(-100);

-> null

pow(x,y)


power(x,y)
x의 y승 값을 구한다.

mysql> select pow(2,2);

-> 4.000000

mysql> select pow(2,-2);

-> 0.250000


sqrt(x)
x의 근을 구한다

mysql> select sqrt(4);

-> 2.000000

mysql> select sqrt(20);

-> 4.472136


pi()
파이 값을 리턴한다

mysql> select pi();

-> 3.141593


cos(x)
x 의 코사인 값을 구한다 ( x 는 라디안)

mysql> select cos(pi());

-> -1.000000<
br>
sin(x)
x 의 사인 값을 구한다 ( x 는 라디안)

mysql> select sin(pi());

-> 0.000000


tan(x)
x 의 탄젠트 값을 구한다 ( x 는 라디안)

mysql> select tan(pi()+1);

-> 1.557408


acos(x)
x 의 아크 코사인 값을 구한다 ( x 가 -1 ~ 1 사이의 값이 아니면 null 리턴 )

mysql> select acos(1);

-> 0.000000

mysql> select acos(1.0001);

-> null

mysql> select acos(0);

-> 1.570796


asin(x)

x 의 아크 사인 값을 구한다 ( x 가 -1 ~ 1 사이의 값이 아니면 null 리턴 )

mysql> select asin(0.2);

-> 0.201358

mysql> select asin('foo');

-> 0.000000


atan(x)

x 의 아크 탄젠트 값을 구한다

mysql> select atan(2);

-> 1.107149

mysql> select atan(-2);

-> -1.107149

atan2(x,y)


x 와 y 사이의 아크 탄젠트 값을 구한다. atan(y / x) 와 같다

mysql> select atan(-2,2);

-> -0.785398

mysql> select atan(pi(),0);

-> 1.570796

cot(x)


x의 코탄젠트 값을 구한다

mysql> select cot(12);

-> -1.57267341

mysql> select cot(0);

-> null

rand()

rand(n)


0 과 1.0 사이의 난수를 만들어 낸다.

n이 주어질 경우 난수 발생을 위한 시드(seed) 로 사용된다.

mysql> select rand();

-> 0.5925

mysql> select rand(20);

-> 0.1811

mysql> select rand(20);

-> 0.1811

mysql> select rand();

-> 0.2079

mysql> select rand();

-> 0.7888


least(x,y,...)

주어진 인수 중 가장 작은 것을 찾아낸다.

mysql> select least(2,0);

-> 0

mysql> select least(34.0,3.0,5.0,762.0);

-> 3.0

mysql> select least("b","a","c");

-> "a"


greatest(x,y,...)

주어진 인수 중 가장 작은 큰 것을 찾아낸다.

mysql> select greatest(2,0);

-> 2

mysql> select greatest(34.0,3.0,5.0,762.0);

-> 762.0

mysql> select greatest("b","a","c");

-> "c"

in mysql versions prior to 3.22.5, you can use max() instead of greatest.

degrees(x)

returns the argument x, converted from radians to degrees.

mysql> select degrees(pi());

-> 180.000000


radians(x)

도(degree)를 라디안 값으로 변환한다.

mysql> select radians(90);

-> 1.570796


truncate(x,d)

숫자 x를 소수점 아래 d자리까지만 보여준다

mysql> select truncate(1.223,1);

-> 1.2

mysql> select truncate(1.999,1);

-> 1.9

mysql> select truncate(1.999,0);

-> 1


9) 문자열 함수
문자열 함수는 결과값의 길이가 max_allowed_packet 에서 정의된 것보다 클 경우 null 을 리턴한다.

문자열의 위치를 다루는 함수에서 첫번째 문자열의 위치는 1로 처리한다.

ascii(str)
문자열 str의 가장 좌측에 위치한 문자의 ascii 코드값을 알려준다. 문자열이 비어있으면 0 을, 인수가 null이면 null을 리턴한다.

mysql> select ascii('2');

-> 50

mysql> select ascii(2);

-> 50

mysql> select ascii('dx');

-> 100


conv(n,from_base,to_base)
숫자 n을 서로 다른 진수로 변환시킨 후 문자열로 출력한다. from_base 진수형식으로부터 to_base 진수형식으로 변환된다. 인수 중 하나라도 null 이 있으면 null이 리턴 된다. 2진수부터 36진수까지 지원된다

mysql> select conv("a",16,2);

-> '1010'

mysql> select conv("6e",18,8);

-> '172'

mysql> select conv(-17,10,-18);

-> '-h'

mysql> select conv(10+"10"+'10'+0xa,10,10);

-> '40'


bin(n)
10진수 을 2진수 형식으로 바꿔준다. conv(n,10,2) 와 같다.만일 n이 null이면 null을 리턴한다.

mysql> select bin(12);

-> '1100'


oct(n)
10진수 을 8진수 형식으로 바꿔준다. conv(n,10,8) 와 같다.만일 n이 null이면 null을 리턴한다.

mysql> select oct(12);

-> '14'


hex(n)
10진수 n을 16진수 형식으로 바꿔준다. conv(n,10,2) 와 같다.만일 n이 null이면 null을 리턴한다.

mysql> select hex(255);

-> 'ff'


char(n,...)
char() 정수 n 에 해당하는 ascii 코드 값 변환해 출력한다. null 은 무시된다.

mysql> select char(77,121,83,81,'76');

-> 'mysql'

mysql> select char(77,72.3,'72.3');

-> 'mmm'


concat(x,y,...)
문자열을 이어준다. 인수가 2개 이상 되어야 하며 하나라도 null 이 있으면 null 이 리턴 된다.

mysql> select concat('my', 's', 'ql');

-> 'mysql'

mysql> select concat('my', null, 'ql');

-> null


length(str)

octet_length(str)

char_length(str)

character_length(str)
문자열str의 길이를 리턴한다.

mysql> select length('text');

-> 4

mysql> select octet_length('text');

-> 4


locate(substr,str)

position(substr in str)
문자열 str 에서 처음으로 나타나는 문자열 substr 의 위치를 리턴한다. 만일 substr을 찾지 못한 경우 0을 리턴한다.

mysql> select locate('bar', 'foobarbar');

-> 4

mysql> select locate('xbar', 'foobar');

-> 0


lpad(str,len,padstr)
len 길이만큼 padstr 문자로 str의 왼쪽을 채워서 보여준다

mysql> select lpad('hi',4,'??');

-> '??hi'


rpad(str,len,padstr)
len 길이만큼 padstr 문자로 str의 오른쪽을 채워서 보여준다

mysql> select rpad('hi',5,'?');

-> 'hi???'


left(str,len)
문자열str 을 왼쪽에서len 길이만큼만 보여준다.

mysql> select left('foobarbar', 5);

-> 'fooba'


right(str,len)
substring(str from len)

문자열str 을 오른쪽에서len 길이만큼만 보여준다.

mysql> select right('foobarbar', 4);

-> 'rbar'

mysql> select substring('foobarbar' from 4);

-> 'rbar'


substring(str,pos,len)

substring(str from pos for len)

mid(str,pos,len)
문자열str 을 pos 위치에서len 길이만큼만 보여준다.

mysql> select substring('quadratically',5,6);

-> 'ratica'


substring(str,pos)
문자열str 을 pos 위치에서 끝까지 보여준다.

mysql> select substring('quadratically',5);

-> 'ratically'


substring_index(str,delim,count)
문자열 str 을 delim 로 구분해서 배열로 만든 후 count 만큼만 보여준다. count 가 양수이면 왼쪽에서 count 수만큼 보여주고 음수이면 오른쪽에서 count 수 만큼 보여준다.

mysql> select substring_index('www.mysql.com', '.', 2);

-> 'www.mysql'

mysql> select substring_index('www.mysql.com', '.', -2);

-> 'mysql.com'


ltrim(str)
문자열 str 의 왼쪽 공백을 제거한다.

mysql> select ltrim(' barbar');

-> 'barbar'


rtrim(str)
문자열 str 의 오른쪽 공백을 제거한다.

mysql> select rtrim('barbar ');

-> 'barbar'


trim([[both | leading | trailing] [remstr] from] str)
옵션에 따라 문자열에서 공백을 제거 한다.

both 앞뒤 공백제거

leading 앞쪽 공백제거

trailing 뒤쪽 동백제거

mysql> select trim(' bar ');

-> 'bar'

mysql> select trim(leading 'x' from 'xxxbarxxx');

-> 'barxxx'

mysql> select trim(both 'x' from 'xxxbarxxx');

-> 'bar'

mysql> select trim(trailing 'xyz' from 'barxxyz');

-> 'barx'


space(n)
n 개의 공백 문자열을 리턴한다.

mysql> select space(6);

-> ' '


replace(str,from_str,to_str)
문자열 str 에서 문자열 from_str을 문자열to_str로 치환한다.

mysql> select replace('www.mysql.com', 'w', 'ww');

-> 'wwwwww.mysql.com'


repeat(str,count)
문자열 str 을 count 수만큼 반복한다.

mysql> select repeat('mysql', 3);

-> 'mysqlmysqlmysql'


reverse(str)
문자열의 순서를 뒤집는다.

mysql> select reverse('abc');

-> 'cba'


insert(str,pos,len,newstr)
문자열 str 의 특정위치 pos 부터 len 길이만큼 새로운 문자열로 바꿔 넣는다.

mysql> select insert('quadratic', 3, 4, 'what');

-> 'quwhattic'


elt(n,str1,str2,str3,...)
문자열의 목록에서 n 번째 문자열을 리턴한다.

mysql> select elt(1, 'ej', 'heja', 'hej', 'foo');

-> 'ej'

mysql> select elt(4, 'ej', 'heja', 'hej', 'foo');

-> 'foo'


field(str,str1,str2,str3,...)
문자열 str 이 뒤따라오는 문자열의 목록에서 몇 번째 위치하는지 알려준다.

mysql> select field('ej', 'hej', 'ej', 'heja', 'hej', 'foo');

-> 2

mysql> select field('fo', 'hej', 'ej', 'heja', 'hej', 'foo');

-> 0


lcase(str)

lower(str)
문자열을 컴파일 시 지정된 문자 셋에 따라 소문자로 변환한다. (디폴트는 iso-8859-1 latin1 이다).

mysql> select lcase('quadratically');

-> 'quadratically'


ucase(str)

upper(str)
문자열을 컴파일 시 지정된 문자 셋에 따라 대문자로 변환한다. (디폴트는 iso-8859-1 latin1 이다).

mysql> select ucase('hej');

-> 'hej'


load_file(file_name)
파일을 읽어 파일의 내용을 문자열로 리턴한다. 파일은 같은 서버에 존재해야 하면 반드시 절대 경로를 적어주어야 한다. 또한 max_allowed_packet(디폴트로64kbyte)의 길이보다 작아야 한다. 파일이 존재하지 않거나 크기가 이 보다 크면 null이 리턴된다.

아래는 파일을 읽어 이 내용을 blob 컬럼에 업데이트 하는 보기이다.

mysql> update table_name set blob_column=load_file("/tmp/picture") where id=1;


위의 예에서 한가지 재미있는 점은 숫자형을 문자열로 바꿔주는 함수를 사용하지 않은 것인데 이는mysql이 필요에 자동적으로 따라 문자열을 숫자로 혹은 그 반대로 변환하기 때문이다. 다음 예를 보면 쉽게 이해가 될 것이다.

mysql> select 1+"1";

-> 2

mysql> select concat(2,' test');

-> '2 test'


10) 날짜 및 시간 함수
- 실제 mysql 에서는 다른 데이터베이스에서 제공하지 않는 매우 편리한 함수를 많이 제공하고 있다. 실제로 프로그래밍을 하다 보면 사소한 것까지 배려한 많은 함수에 저절로 감탄사가 나올 때가 있을 것이다.

dayofweek(date)
날자를 한 주의 몇 번째 요일인지를 나타내는 숫자로 리턴한다. (1 = 일요일, 2 = 월요일, ... 7 = 토요일)

mysql> select dayofweek('1998-02-03');

-> 3


weekday(date)
날자를 한 주의 몇 번째 요일인지를 나타내는 숫자로 리턴한다. (0 = 월요일, 1=화요일 ... 6 = 일요일)

mysql> select weekday('1997-10-04 22:23:00');

-> 5

mysql> select weekday('1997-11-05');

-> 2


dayofmonth(date)
그 달의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 31 사이이다.

mysql> select dayofmonth('1998-02-03');

-> 3


dayofyear(date)
한해의의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 366 사이이다.

mysql> select dayofyear('1998-02-03');

-> 34


month(date)
해당 날자가 몇 월인지 알려준다. 리턴 값은 1에서 12 사이이다.

mysql> select month('1998-02-03');

-> 2


dayname(date)
해당 날자의 영어식 요일이름을 리턴한다.

mysql> select dayname("1998-02-05");

-> 'thursday'


monthname(date)
해당 날자의 영어식 월 이름을 리턴한다.

mysql> select monthname("1998-02-05");

-> 'february'그럼


quarter(date)
분기를 리턴한다 (1~ 4)

mysql> select quarter('98-04-01');

-> 2


week(date)

week(date,first)
인수가 하나일 때는 해달 날자가 몇 번째 주일인지(0 ~ 52)를 리턴하고 2개일 때는 주어진 인수로 한 주의 시작일을 정해 줄 수 있다. 0이면 일요일을1이면 월요일을 한 주의 시작일로 계산해 몇 번째 주인가 알려준다.

mysql> select week('1998-02-20');

-> 7

mysql> select week('1998-02-20',0);

-> 7

mysql> select week('1998-02-20',1);

-> 8


year(date)
년도를 리턴한다.(1000 ~ 9999)

mysql> select year('98-02-03');

-> 1998


hour(time)
시간을 알려준다.(0 ~ 23)

mysql> select hour('10:05:03');

-> 10


minute(time)
분을 알려준다(0 ~ 59)

mysql> select minute('98-02-03 10:05:03');

-> 5


second(time)
초를 알려준다(0 ~ 59)

mysql> select second('10:05:03');

-> 3


period_add(p,n)
yymm 또는 yyyymm 형식으로 주어진 달에n 개월을 더한다. 리턴 값은 yyyymm 의 형식이다.

mysql> select period_add(9801,2);

-> 199803


period_diff(p1,p2)
yymm 또는 yyyymm 형식으로 주어진 두 기간사이의 개월을 구한다

mysql> select period_diff(9802,199703);

-> 11

date_add(date,interval expr type)

date_sub(date,interval expr type)

adddate(date,interval expr type)

subdate(date,interval expr type)



위의 함수들은 날자 연산을 한다. 잘 만 사용하면 꽤나 편리한 함수 들이다. 모두 mysql 3.22 버전에서 새롭게 추가되었다. adddate() 과 subdate() 는 date_add() 와 date_sub()의 또 다른 이름이다.

인수로 사용되는 date 는 시작일을 나타내는 datetime 또는date 타입이다. expr 는 시작일에 가감하는 일수 또는 시간을 나타내는 표현식이다.

type 값


의미


사용 예

second

seconds
minute

minutes
hour
시간
hours
day

days
month

months
year

years
minute_second
분:초
"minutes:seconds"
hour_minute
시:분
"hours:minutes"
day_hour
일 시
"days hours"
year_month
년 월
"years-months"
hour_second
시 분
"hours:minutes:seconds"
day_minute
일, 시, 분
"days hours:minutes"
day_second
일, 시, 분, 초
"days hours:minutes:seconds"


아래 예제를 참고하면 쉽게 이해가 갈 것이다.

mysql> select date_add("1997-12-31 23:59:59",

interval 1 second);

-> 1998-01-01 00:00:00

mysql> select date_add("1997-12-31 23:59:59",

interval 1 day);

-> 1998-01-01 23:59:59

mysql> select date_add("1997-12-31 23:59:59",

interval "1:1" minute_second);

-> 1998-01-01 00:01:00

mysql> select date_sub("1998-01-01 00:00:00",

interval "1 1:1:1" day_second);

-> 1997-12-30 22:58:59

mysql> select date_add("1998-01-01 00:00:00",

interval "-1 10" day_hour);

-> 1997-12-30 14:00:00

mysql> select date_sub("1998-01-02", interval 31 day);

-> 1997-12-02


to_days(date)
주어진 날자를 0000년부터의 일수로 바꾼다.

mysql> select to_days(950501);

-> 728779

mysql> select to_days('1997-10-07');

-> 729669


from_days(n)
주어진 일수 n로부터 날자를 구한다

mysql> select from_days(729669);

-> '1997-10-07'


date_format(date,format)
format 의 정의에 따라 날자 혹은 시간을 출력한다. 매우 빈번히 쓰이는 함수 이다.

format 에 사용되는 문자는 다음과 같다.


문자
의미
%m
월이름 (january..december)
%w
요일명 (sunday..saturday)
%d
영어식 접미사를 붙인 일(1st, 2nd, 3rd, etc.)
%y
4자리 년도
%y
2자리 년도
%a
짧은 요일명(sun..sat)
%d
일(00..31)
%e
일(0..31)
%m
월(01..12)
%c
월(1..12)
%b
짧은 월이름 (jan..dec)
%j
한해의 몇 번째 요일인가 (001..366)
%h
24시 형식의 시간 (00..23)
%k
24시 형식의 시간 (0..23)
%h
12시 형식의 시간 (01..12)
%i
12시 형식의 시간 (01..12)
%l
시간 (1..12)
%i
분 (00..59)
%r
시분초12시 형식 (hh:mm:ss [ap]m)
%t
시분초 24시 형식 (hh:mm:ss)
%s
초 (00..59)
%s
초 (00..59)
%p
am 또는 pm 문자
%w
일주일의 몇 번째 요일인가(0=sunday..6=saturday)
%u
한해의 몇 번째 주인가(0..52). 일요일이 시작일
%u
한해의 몇 번째 주인가(0..52). 월요일이 시작일
%%
`%' 문자를 나타냄


위 표에 나와 있는 것들을 제외한 모든 문자는 그냥 그대로 출력된다.

mysql> select date_format('1997-10-04 22:23:00', '%w %m %y');

-> 'saturday october 1997'

mysql> select date_format('1997-10-04 22:23:00', '%h:%i:%s');

-> '22:23:00'

mysql> select date_format('1997-10-04 22:23:00',

'%d %y %a %d %m %b %j');

-> '4th 97 sat 04 10 oct 277'

mysql> select date_format('1997-10-04 22:23:00',

'%h %k %i %r %t %s %w');

-> '22 22 10 10:23:00 pm 22:23:00 00 6'


주의! : mysql 3.23 버전부터 % 기호가 각 형식문자 앞에 필요하게 되었다 그 이전 버전에서는 선택 사항이다.

time_format(time,format)


이 함수는 date_format()와 비슷한 역할을 하지만 단지 시,분,초 만을 나타낼 수 있다는 점이다.

curdate()

current_date


오늘 날짜를 'yyyy-mm-dd' 또는 yyyymmdd 형식으로 리턴한다, 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다.

mysql> select curdate();

-> '1997-12-15'

mysql> select curdate() + 0;

-> 19971215


curtime()

current_time
'hh:mm:ss' 또는 hhmmss 형식으로 현재시간을 나타낸다. 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다.

mysql> select curtime();

-> '23:50:26'

mysql> select curtime() + 0;

-> 235026


now()

sysdate()

current_timestamp
오늘 날자와 현재 시간을 'yyyy-mm-dd hh:mm:ss' 또는 yyyymmddhhmmss 형식으로 리턴 한다, 역시 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다. 실제 개발 시 사용자의 등록일시 등을 나타낼 때 유용하게 쓰이는 함수다. 뒷부분의 실전예제에서 보게 될 것이다.

mysql> select now();

-> '1997-12-15 23:50:26'

mysql> select now() + 0;

-> 19971215235026


unix_timestamp()

unix_timestamp(date)
인수가 없이 사용될 경우 현재 시간의 유닉스 타임스탬프를 리턴하고

만일 날짜형식의 date 가 인수로 주어진 경우에는 주어진 날자의 유닉스 타임스탬프를 리턴한다 유닉스 타임스탬프 란 그리니치 표준시로 1970 년 1월 1일 00:00:00 이 후의 시간경과를 초단위로 나타낸 것이다.

mysql> select unix_timestamp();

-> 882226357

mysql> select unix_timestamp('1997-10-04 22:23:00');

-> 875996580


주의 : 만일 unix_timestamp함수가 timestamp 컬럼 에서 사용될 경우에는 주어진 시간이 타임스탬프로 바뀌지 않고 그대로 저장된다.

from_unixtime(unix_timestamp)
주어진 유닉스 타임스탬프 값으로부터 'yyyy-mm-dd hh:mm:ss' 또는 yyyymmddhhmmss 형식의 날짜를 리턴한다.

mysql> select from_unixtime(875996580);

-> '1997-10-04 22:23:00'

mysql> select from_unixtime(875996580) + 0;

-> 19971004222300


from_unixtime(unix_timestamp,format)
주어진 유닉스 타임스탬프 값을 주어진 날짜 형식에 맞게 바꿔서 보여준다. 여기서 사용되는 형식문자는 date_format() 함수에서 사용된 것과 같다.

아래 예에서 %x 는 형식문자가 아니므로 그냥 x 가 표시됨에 유의하기 바란다.

mysql> select from_unixtime(unix_timestamp(),

'%y %d %m %h:%i:%s %x');

-> '1997 23rd december 03:43:30 x'


sec_to_time(seconds)
주어진 초를 'hh:mm:ss' 또는 hhmmss 형식의 시간단위로 바꿔준다.

mysql> select sec_to_time(2378);

-> '00:39:38'

mysql> select sec_to_time(2378) + 0;

-> 3938


time_to_sec(time)
주어진 시간을 초 단위로 바꿔준다.

mysql> select time_to_sec('22:23:00');

-> 80580

mysql> select time_to_sec('00:39:38');

-> 2378

'데이타베이스 > Mysql' 카테고리의 다른 글

Mysql 서버 5.0의 신기능  (0) 2008.06.22
Mysql Explain 정보보는법  (0) 2008.06.22
Mysql Join 정리  (0) 2008.06.22
Mtsql UDF(User Defined Function) 추가하기  (0) 2008.06.22
Mysql 함수  (0) 2008.06.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크