Tổng Hợp Các Hàm Về Date/Time Trong Mysql

15:30PM 09/03/2011, Lập trình web

NOW(): ngày hiện tại dạng yyyy-mm-dd h:m:s
ví dụ: SELECT NOW(); //kết quả: 2007-03-28 11:29:33

CURDATE(): ngày hiện tại dạng yyyy-mm-dd
ví dụ: SELECT CURDATE(); //kết quả: 2007-03-28

YEAR(): xác định năm từ 1 ngày cho trước
ví dụ: SELECT YEAR('2007-03-28 11:30:14');//kết quả: 2007

MONTH(): xác định tháng (1-12) từ 1 ngày cho trước
ví dụ: SELECT MONTH('2007-03-28 11:30:11') // kết quả: 3

MONTHNAME(): xác định tháng (January-December) từ 1 ngày cho trước
ví dụ: SELECT MONTH('2007-03-28 11:30:11')//kết quả: March

WEEKOFYEAR(): thứ tự của tuần trong năm
ví dụ: SELECT WEEKOFYEAR('200-03-28'); //kết quả: 13

WEEKDAY: số thứ tự của ngày trong tuần(0 = Monday, 6 = Sunday)
ví dụ: SELECT WEEKDAY('2007-03-28 12:23:50'); //kết quả: 2 (tương đương thứ 4)

DATE(): xác định chính ngày từ 1 biểu thức ngày
ví dụ: SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'

DATEDIFF(expr1,expr2): tính số ngày giữa 2 ngày expr1 và expr2, nếu số ngày >0 nghĩa là expr1>expr2 và ngược lại
Ví dụ: SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit): cộng(DATE_ADD) hoặc trừ(DATE_SUB) thêm vào ngày cho trước(date)
trong đó unit bao gồm các giá trị:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

ví dụ:
SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 SECOND);
-> '1998-01-01 00:00:00'
SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 DAY);
-> '1998-01-01 23:59:59'
SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
-> '1998-01-01 00:01:00'
SELECT DATE_SUB('1998-01-01 00:00:00',
-> INTERVAL '1 1:1:1' DAY_SECOND);
-> '1997-12-30 22:58:59'
SELECT DATE_ADD('1998-01-01 00:00:00',
-> INTERVAL '-1 10' DAY_HOUR);
-> '1997-12-30 14:00:00'
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
SELECT DATE_ADD('1992-12-31 23:59:59.000002',
-> INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'


ngoài ra ta có thể dùng cách sau để thay cho DATE_ADD và DATE_SUB:
date + INTERVAL expr unit <-> DATE_ADD(date, INTERVAL expr unit)
date - INTERVAL expr unit <-> DATE_SUB(date, INTERVAL expr unit)

DATE_FORMAT(date,): định dạng lại ngày trong mysql theo định dạng của format
ví dụ:
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
Các giá trị của format
%a : Sun,..,Sat
%b : Jan,..,Dec)
%c : Month, 0..12
%D : ngày 0th, 1st, 2nd, 3rd, …
%d : ngày 00..31
%e : ngày 0..31
%f : micro giây 000000..999999
%H : giờ (00..23)
%h : giờ (01..12)
%I : giờ (01..12)
%i : Phút (00..59)
%j : Ngày trong năm (001..366)
%k : giờ (0..23)
%l : giờ (1..12)
%M : Tháng(January..December)
%m : Tháng (00..12)
%p : AM hoặc PM
%r : Time, 12-hour (hh:mm:ss followed by AM or PM)
%S : Seconds (00..59)
%s : Seconds (00..59)
%T : Time, 24-hour (hh:mm:ss)
%U : Week (00..53), tuần bắt đầu bằng ngày Sunday
%u : Week (00..53), tuần bắt đầu bằng ngày Sunday,dùng với %X
%v : Week (01..53), tuần bắt đầu bằng ngày Monday,dùng với %x
%W : ngày trong tuần (Sunday..Saturday)
%w : ngày trong tuần (0=Sunday..6=Saturday)
%X : Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x : Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y : năm (4 ký tự)
%y : năm (2 ký tự: 2 số cuối)
%% : A literal ‘%’ character
%x : x, for any ‘x’ not listed above

DAY()
ví dụ:
SELECT DAY('2007-03-28');
-> 28

DAYNAME()
Ví dụ:
SELECT DAYNAME('1998-02-05');
-> 'Thursday'

DAYOFMONTH(date) : ngày trong tháng 0-31
Ví dụ: SELECT DAYOFMONTH('1998-02-03');
-> 3

DAYOFWEEK(date): ngày trong tuần (1 = Sunday, 2 = Monday, …, 7 = Saturday)
ví dụ: SELECT DAYOFWEEK('1998-02-03');
-> 3

DAYOFYEAR(date): ngày trong năm (1-366)
Ví dụ: SELECT DAYOFYEAR('1998-02-03');
-> 34

EXTRACT(unit FROM date): lấy đơn vị thời gian unit từ ngày date, với unit có các giá trị giống như unit của DATE_ADD và DATE_SUB
Ví dụ: SELECT EXTRACT(YEAR FROM '1999-07-02');
-> 1999
SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
-> 199907
SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03');
-> 20102
SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.00123');
-> 123

FROM_DAYS(N): trả về dạng DATE từ 1 số nguyên
Ví dụ:
SELECT FROM_DAYS(729669);
-> '1997-10-07'
ADDDATE(date,INTERVAL expr unit) :giống như DATE_ADD(date,INTERVAL expr unit)

SUBDATE(date,INTERVAL expr unit) :giống như DATE_SUB(date,INTERVAL expr unit)

Trên đây là 1 số hàm dùng trong MySQL, ngoài ra MySQL còn hổ trợ rất nhiều hàm để xử lý date/time mong rằng qua bài viết này giúp được bạn phần nào trong việc xử lý ngày/tháng trong mysql

Ví dụ:
tính xem ngày đăng ký của thành viên đến nay đã được bao nhiêu ngày
- SELECT DATEIFF(field_date,NOW()) FROM


Theo congdongjava.com