Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
Hàm Curdate trong SQL, hàm Extract trong SQL chỉ là một phần nhỏ trong số hàm SQL bạn cần biết. Ở bài viết này, hãy cùng nhau tìm hiểu chi tiết hơn về hàm DATE/TIME được sử dụng phổ biến trong lập trình SQL nhé!
Nếu đang tìm kiếm hàm format date trong SQL thì bạn đã tới đúng địa chỉ. Bài viết sẽ cung cấp cho bạn những kiến thức cần biết về hàm ngày tháng và thời gian trong SQL.
Hàm DATE & TIME được tích hợp sẵn trong SQL, cho phép bạn thao tác và thực hiện những hoạt động theo giá trị ngày tháng và thời gian trong SQL. Những hàm này có thể được dùng trong các truy vấn SQL để thực hiện những hoạt động ngày tháng & thời gian khác nhau, chẳng hạn như lọc bản ghi dựa trên ngày tháng, tính sự khác biệt giữa ngày tháng và định dạng ngày tháng cho mục đích hiển thị.
Phần khó nhất khi làm việc với hàm các hàm date trong SQL là bạn cần đảm bảo định dạng ngày tháng định chèn, khớp với định dạng cột ngày tháng trong database.
Miễn là dữ liệu của bạn chỉ chứa phần ngày tháng, các truy vấn sẽ luôn hoạt động như mong đợi. Tuy nhiên, nếu bao gồm phần giờ, cách sử dụng nó sẽ phức tạp hơn.
Hàm |
Mô tả |
Trả về ngày & giờ hiện tại |
|
Trả về ngày hiện tại |
|
Trả về về giờ hiện tại |
|
Trích xuất phần ngày tháng trong biểu thức date hoặc date/time |
|
Trả về một phần của ngày/giờ |
|
Thêm khoảng thời gian cụ thể cho ngày tháng |
|
Trừ một khoảng thời gian cụ thể tính từ ngày tháng hiện tại |
|
Trả về số ngày giữa hai ngày |
|
Hiện dữ liệu ngày giờ ở các định dạng khác nhau |
SQL còn đi kèm với các kiểu dữ liệu sau để lưu trữ giá trị ngày hoặc ngày/giờ trong database:
Có 2 dạng hàm ADDDATE:
1. ADDDATE(expr, day)
Thêm một khoảng thời gian nhất định vào tham số thời gian được truyền.
mysql> SELECT ADDDATE('2019-01-02', 31); +---------------------------------------------------------+ | ADDDATE('2019-01-02', 31) | +---------------------------------------------------------+ | 2019-02-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
2. ADDDATE(date, interval expr unit)
Khi đối số thứ hai được gọi dưới dạng INTERVAL, hàm ADDDATE() có chức năng giống hàm DATE_ADD().
Ví dụ hàm DATE_ADD sử dụng như này:
mysql> SELECT DATE_ADD('2019-01-02', INTERVAL 31 DAY); +---------------------------------------------------------+ | DATE_ADD('2019-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 2019-02-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Và ADDDATE có chức năng tương tự:
ADDTIME() trong SQL có dạng: ADDTIME(expr1,expr2).
Hàm này cộng giá trị expr2 vào expr1 và trả về kết quả. Expr1 là một biểu thức dạng time hoặc datetime, còn expr2 là một biểu thức time.
mysql> SELECT ADDTIME('2018-12-31 23:59:59.999999','1 1:1:1.000002'); +---------------------------------------------------------+ | DATE_ADD('2018-12-31 23:59:59.999999','1 1:1:1.000002') | +---------------------------------------------------------+ | 2019-01-02 01:01:01.000001 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
CONVERT_TZ() trong SQL có dạng: CONVERT_TZ(dt,from_tz,to_tz).
Hàm này được sử dụng để chuyển đổi giá trị datetime dt từ múi giờ from_tz thành múi giờ to_tz và trả về kết quả. CONVERT_TZ() trả về NULL nếu các đối số không hợp lệ.
Ví dụ 1:
mysql> SELECT CONVERT_TZ('2019-01-01 12:00:00','GMT','MET'); +---------------------------------------------------------+ | CONVERT_TZ('2019-01-01 12:00:00','GMT','MET') | +---------------------------------------------------------+ | 2019-01-01 13:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Ví dụ 2:
mysql> SELECT CONVERT_TZ('2019-01-01 12:00:00','+00:00','+10:00'); +---------------------------------------------------------+ | CONVERT_TZ('2019-01-01 12:00:00','+00:00','+10:00') | +---------------------------------------------------------+ | 2019-01-01 22:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
CURDATE() trong SQL trả về ngày hiện tại có định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT CURDATE(); +---------------------------------------------------------+ | CURDATE() | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CURDATE() + 0; +---------------------------------------------------------+ | CURDATE() + 0 | +---------------------------------------------------------+ | 20190315 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
CURRENT_DATE hay CURRENT_DATE() trong SQL trả về ngày hiện tại có định dạng 'YYYY-MM-DD' hoặc YYYYMMDD, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Hàm này sử dụng tương tự như CURDATE().
mysql> SELECT CURRENT_DATE; +---------------------------------------------------------+ | CURRENT_DATE | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CURRENT_DATE() + 1; +---------------------------------------------------------+ | CURRENT_DATE() + 1 | +---------------------------------------------------------+ | 20190316 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
CURTIME() trong SQL trả về thời gian hiện tại dưới dạng giá trị 'HH: MM: SS' hoặc HHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT CURTIME(); +---------------------------------------------------------+ | CURTIME() | +---------------------------------------------------------+ | 14:50:26 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CURTIME() + 0; +---------------------------------------------------------+ | CURTIME() + 0 | +---------------------------------------------------------+ | 145026 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm CURRENT_TIME hay CURRENT_TIME() trong SQL trả về thời gian hiện tại dưới dạng giá trị 'HH: MM: SS' hoặc HHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Hàm này sử dụng tương tự như CURTIME().
Hàm CURRENT_TIMESTAMP hay CURRENT_TIMESTAMP() trong SQL trả về datetime hiện tại dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDHHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Hàm này sử dụng tương tự như NOW().
mysql> SELECT CURRENT_TIMESTAMP; +---------------------------------------------------------+ | CURRENT_TIMESTAMP | +---------------------------------------------------------+ | 2019-03-15 07:36:12 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DATE() trong SQL có dạng: DATE(expr).
Hàm DATE() trả về phần ngày của biểu thức expr dưới dạng date hoặc datetime được truyền vào.
mysql> SELECT DATE('2019-12-31 01:02:03'); +---------------------------------------------------------+ | DATE('2019-12-31 01:02:03') | +---------------------------------------------------------+ | 2019-12-31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DATEDIFF() trong SQL có dạng: DATEDIFF (expr1, expr2).
Hàm này trả về chênh lệch giữa hai giá trị thời gian dựa trên khoảng thời gian được chỉ định expr1 và expr2. Hai giá trị thời gian này phải là biểu thức dưới dạng date hoặc datetime. Chỉ tính phần ngày của các giá trị được sử dụng trong tính toán.
mysql> SELECT DATEDIFF('2019-12-31 23:59:59','2019-12-30'); +---------------------------------------------------------+ | DATEDIFF('2019-12-31 23:59:59','2019-12-30') | +---------------------------------------------------------+ | 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT DATEDIFF('2019-01-12 23:59:59','2019-02-12 23:59:59'); +---------------------------------------------------------+ | DATEDIFF('2019-01-12 23:59:59','2019-02-12 23:59:59') | +---------------------------------------------------------+ | -31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DATE_ADD() trong SQL có dạng: DATE_ADD(date,INTERVAL expr unit).
Hàm DATE_ADD() dùng để thực hiện phép toán cộng '+' số học trên date.
Từ khóa INTERVAL và unit không phân biệt chữ hoa chữ thường.
Bảng dưới đây cho thấy định dạng của đối số expr cho mỗi giá trị unit.
GIÁ TRỊ UNIT | ĐỊNH DẠNG CỦA EXPR |
MICROSECOND | MICROSECOND - Micro giây |
SECOND | SECOND - Giây |
MINUTE | MINUTE - Phút |
HOUR | HOUR - Giờ |
DAY | DAY - Ngày |
WEEK | WEEK - Tuần |
MONTH | MONTH - Tháng |
QUARTER | QUARTER - Quý |
YEAR | YEAR - Năm |
SECOND_MICROSECOND | 'SECOND.MICROSECOND' - Giây.Micro giây |
MINUTE_MICROSECOND | 'MINUTE.MICROSECOND' - Phút.Micro giây |
MINUTE_SECOND | 'MINUTE:SECOND' - Phút:Giây |
HOUR_MICROSECOND | 'HOUR.MICROSECOND' - Giờ.Micro giây |
HOUR_SECOND | 'HOUR:MINUTES:SECOND' - Giờ:Phút:Giây |
HOUR_MINUTE | 'HOUR:MINUTE' - Giờ:Phút |
DAY_MICROSECOND | 'DAY.MICROSECOND' - Ngày.Micro giây |
DAY_SECOND | 'DAY HOUR:MINUTE:SECOND' - Ngày Giờ:Phút:Giây |
DAY_MINUTE | 'DAY HOUR:MINUTE' - Ngày Giờ:Phút |
DAY_HOUR | 'DAY HOUR' - Ngày Giờ |
YEAR_MONTH | 'YEAR-MONTH' - Năm-Tháng |
Các giá trị QUARTER và WEEK bắt đầu có từ phiên bản MySQL 5.0.0.
mysql> SELECT DATE_ADD('2019-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND); +---------------------------------------------------------+ | DATE_ADD('2019-12-31 23:59:59', INTERVAL... | +---------------------------------------------------------+ | 2020-01-01 00:01:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_ADD('2019-01-01', INTERVAL 1 HOUR); +---------------------------------------------------------+ | DATE_ADD('2019-01-01', INTERVAL 1 HOUR) | +---------------------------------------------------------+ | 2019-01-01 01:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DATE_SUB() trong SQL có dạng: DATE_SUB(date,INTERVAL expr unit).
Hàm DATE_SUB() dùng để thực hiện phép toán trừ '-' số học trên date.
Từ khóa INTERVAL và unit không phân biệt chữ hoa chữ thường.
Định dạng của đối số expr cho mỗi giá trị unit tương tự như hàm DATE_ADD().
Các giá trị QUARTER và WEEK bắt đầu có từ phiên bản MySQL 5.0.0.
mysql> SELECT DATE_SUB('2019-06-15', INTERVAL -10 DAY); +---------------------------------------------------------+ | SELECT DATE_SUB('2019-06-15', INTERVAL -10 DAY); | +---------------------------------------------------------+ | 2019-06-25 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2019-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND); +---------------------------------------------------------+ | DATE_SUB('2019-12-31 23:59:59', INTERVAL... | +---------------------------------------------------------+ | 2019-12-31 23:58:58 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DATE_FORMAT() trong SQL có dạng: DATE_FORMAT(date,format) dùng để định dạng giá trị date theo chuỗi format.
Dưới đây là các specifier có thể được sử dụng trong chuỗi format. Ký tự '%' là bắt buộc trước các ký tự specifier này.
Specifier | Giải thích |
%a | Tên ngày trong tuần viết tắt (Sun..Sat) |
%b | Tên tháng viết tắt (Jan..Dec) |
%c | Tháng, dạng giá trị số (0..12) |
%D | Ngày tháng theo số đếm (0th, 1st, 2nd, 3rd,…) |
%d | Ngày trong tháng, dạng giá trị số (00..31) |
%e | Ngày trong tháng, dạng giá trị số (0..31) |
%f | Microsecond (000000..999999) |
%H | Giờ, dạng giá trị (00..23) |
%h | Giờ, dạng giá trị (01..12) |
%I | Giờ, dạng giá trị (01..12) |
%i | Phút, dạng giá trị số (00..59) |
%j | Ngày trong năm (001..366) |
%k | Giờ, dạng giá trị (0..23) |
%l | Giờ, dạng giá trị (1..12) |
%M | Tên tháng (January..December) |
%m | Tháng, dạng giá trị số (00..12) |
%p | AM hoặc PM |
%r | Thời gian, 12h (hh:mm:ss được theo sau bởi AM hoặc PM) |
%S | Giây (00..59) |
%s | Giây (00..59) |
%T | Thời gian, 24h (hh:mm:ss) |
%U | Tuần trong năm (00..53), với Sunday là ngày đầu tiên của tuần |
%u | Tuần trong năm (00..53), với Monday là ngày đầu tiên của tuần |
%V | Tuần trong năm (01..53), với Sunday là ngày đầu tiên của tuần; được sử dụng với %X |
%v | Tuần trong năm (01..53), với Monday là ngày đầu tiên của tuần; được sử dụng với %x |
%W | Tên ngày trong tuần (Sunday..Saturday) |
%w | Ngày trong tuần, dạng số (0=Sunday..6=Saturday) |
%X | Năm cho tuần, với Sunday là ngày đầu tiên của tuần, giá trị 4 chữ số; được sử dụng với %V |
%x | Năm cho tuần, với Monday là ngày đầu tiên của tuần, giá trị 4 chữ số; được sử dụng với %v |
%Y | Năm, giá trị 4 chữ số |
%y | Năm, giá trị 2 chữ số |
%% | Một hằng ký tự .%. |
%x | Đối với bất kỳ .x. nào không được liệt kê ở trên |
Ví dụ:
mysql> SELECT DATE_FORMAT('2019-10-04 22:23:00', '%H %k %I %r %T %S %w'); +---------------------------------------------------------+ | DATE_FORMAT('2019-10-04 22:23:00....... | +---------------------------------------------------------+ | 22 22 10 10:23:00 PM 22:23:00 00 5 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT('2019-10-04 22:23:00', '%W %M %Y'); +---------------------------------------------------------+ | DATE_FORMAT('2019-10-04 22:23:00', '%W %M %Y') | +---------------------------------------------------------+ | Saturday October 2019 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAY() trong SQL có dạng: DAY(date).
Hàm DAY() trả về ngày trong tháng từ date đã truyền vào, trong khoảng từ 0 đến 31.
mysql> SELECT DAY('2019-06-15'); +---------------------------------------------------------+ | DAY('2019-06-15') | +---------------------------------------------------------+ | 15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm này sử dụng tương tự như DAYOFMONTH().
DAYNAME() trong SQL có dạng: DAYNAME(date).
Hàm DAYNAME() trả về tên của ngày trong tuần của date đã được truyền vào.
mysql> SELECT DAYNAME('2019-03-15'); +---------------------------------------------------------+ | DAYNAME('2019-03-15') | +---------------------------------------------------------+ | Friday | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAYOFMONTH() trong SQL có dạng: DAYOFMONTH(date).
Hàm DAYOFMONTH() trả về ngày trong tháng từ date đã truyền vào, trong khoảng từ 0 đến 31.
mysql> SELECT DAYOFMONTH('2019-06-15'); +---------------------------------------------------------+ | DAYOFMONTH('2019-06-15') | +---------------------------------------------------------+ | 15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm này sử dụng tương tự như DAY().
DAYOFWEEK() trong SQL có dạng: DAYOFWEEK(date).
Hàm DAYOFWEEK() trả về chỉ số ngày trong tuần (1 = Sunday, 2 = Monday... 7 = Saturday). Các giá trị chỉ số này tương ứng với tiêu chuẩn ODBC.
mysql> SELECT DAYOFWEEK('2019-03-15'); +---------------------------------------------------------+ |DAYOFWEEK('2019-03-15') | +---------------------------------------------------------+ | 6 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAYOFYEAR() trong SQL có dạng: DAYOFYEAR(date).
Hàm DAYOFYEAR() trả về số thứ tự của ngày được truyền trong năm trong khoảng từ 1 đến 366.
mysql> SELECT DAYOFYEAR('2019-03-15'); +---------------------------------------------------------+ | DAYOFYEAR('2019-03-15') | +---------------------------------------------------------+ | 74 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
EXTRACT() trong SQL có dạng: EXTRACT(unit FROM date).
Hàm EXTRACT() sử dụng các unit specifier giống như hàm DATE_ADD() và DATE_SUB(), nhưng nó trích các phần từ date chứ không thực hiện các phép toán số học trên date.
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-03-15 01:02:03'); +---------------------------------------------------------+ | EXTRACT(YEAR_MONTH FROM '2019-03-15 01:02:03') | +---------------------------------------------------------+ | 201903 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT EXTRACT(YEAR FROM '2019-03-15'); +---------------------------------------------------------+ | EXTRACT(YEAR FROM '2019-03-15') | +---------------------------------------------------------+ | 2019 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
FROM_DAYS() trong SQL có dạng: FROM_DAYS(N)
Hàm này được sử dụng để chuyển đổi số N thành một giá trị date cụ thể. FROM_DAYS() chỉ được sử dụng với các ngày trong lịch Gregorian (1582).
mysql> SELECT FROM_DAYS(737498); +---------------------------------------------------------+ | FROM_DAYS(737498) | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
FROM_UNIXTIME() trong SQL có dạng: FROM_UNIXTIME(unix_timestamp, [format]).
Thời gian Unix (Unix timestamp) là hệ thống nhằm diễn tả một điểm trên trục thời gian, theo trục thời gian nó sử dụng số giây để xác định thời điểm, với điểm gốc từ thời điểm 00:00:00 ngày 1/1/1970 theo giờ UTC.
Ví dụ: Lúc 00:00:00 - 12/02/2016 có giá trị timestamp là 1455235200; Có nghĩa là tính từ 00:00:00 - 1/1/1970 đến 00:00:00 - 12/02/2016 là 1455235200 giây.
Hàm FROM_UNIXTIME() trả về ngày đại diện của đối số unix_timestamp dưới dạng một giá trị trong định dạng 'YYYY-MM-DD HH:MM:SS' hoặc YYYYMMDDHHMMSS tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Giá trị được thể hiện trong múi giờ hiện tại. Đối số unix_timestamp có thể được tạo ra bởi hàm UNIX_TIMESTAMP().
mysql> SELECT FROM_UNIXTIME(1552688580); +---------------------------------------------------------+ | FROM_UNIXTIME(1552688580) | +---------------------------------------------------------+ | 2019-03-15 22:23:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Nếu tham số format được truyền, kết quả sẽ được định dạng theo chuỗi format được liệt kê tương tự như hàm DATE_FORMAT().
mysql> SELECT FROM_UNIXTIME(1552688580, '%W %M %Y'); +---------------------------------------------------------+ | FROM_UNIXTIME(1552688580, '%W %M %Y') | +---------------------------------------------------------+ | Friday March 2019 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm HOUR() trong SQL có dạng: HOUR(time) trả về giờ từ time được truyền vào. Giá trị trả về nằm trong phạm vi từ 0 đến 23 cho các giá trị thời gian trong ngày.
mysql> SELECT HOUR('10:05:03'); +---------------------------------------------------------+ | HOUR('10:05:03') | +---------------------------------------------------------+ | 10 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm LAST_DAY() trong SQL có dạng: LAST_DAY(date).
Hàm này có tham số truyền vào là giá trị date hoặc datetime, trả về giá trị tương ứng cho ngày cuối cùng của tháng. Output sẽ là NULL nếu tham số không hợp lệ.
mysql> SELECT LAST_DAY('2019-03-15'); +---------------------------------------------------------+ | LAST_DAY('2019-03-15') | +---------------------------------------------------------+ | 2019-03-31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
LOCALTIME hay LOCALTIME() trả về datetime hiện tại dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDHHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Hàm này sử dụng tương tự như NOW().
mysql> SELECT LOCALTIME(); +---------------------------------------------------------+ | LOCALTIME() | +---------------------------------------------------------+ | 2019-03-15 09:53:17 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm LOCALTIMESTAMP hay LOCALTIMESTAMP() trả về datetime hiện tại dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDHHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
Hàm này sử dụng tương tự như NOW().
mysql> SELECT LOCALTIMESTAMP; +---------------------------------------------------------+ | LOCALTIMESTAMP | +---------------------------------------------------------+ | 2019-03-15 10:12:12 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
MAKEDATE() trong SQL có dạng: MAKEDATE(year,dayofyear).
Hàm này trả về một ngày với tham số year và dayofyear được truyền. Giá trị dayofyear phải lớn hơn 0 nếu không kết quả sẽ là NULL.
mysql> SELECT MAKEDATE(2019,31); +---------------------------------------------------------+ | MAKEDATE(2019,31) | +---------------------------------------------------------+ | 2019-01-31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT MAKEDATE(2019,122); +---------------------------------------------------------+ | MAKEDATE(2019,122) | +---------------------------------------------------------+ | 2019-05-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm MAKETIME() trong SQL có dạng: MAKETIME(hour,minute,second), trả về một giá trị time từ các tham số hour, minute, và second được truyền.
mysql> SELECT MAKETIME(12,15,30); +---------------------------------------------------------+ | MAKETIME(12,15,30) | +---------------------------------------------------------+ | '12:15:30' | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm MICROSECOND() trong SQL có dạng MICROSECOND(expr) trả về microsecond từ biểu thức thời gian (expr) dưới dạng số trong khoảng từ 0 đến 999999.
mysql> SELECT MICROSECOND('12:00:00.123456'); +---------------------------------------------------------+ | MICROSECOND('12:00:00.123456') | +---------------------------------------------------------+ | 123456 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm MINUTE() trong SQL có dạng: MINUTE(time), trả về giá trị phút cho từ tham số time được truyền, trong khoảng từ 0 đến 59.
mysql> SELECT MINUTE('19-03-15 10:05:03'); +---------------------------------------------------------+ | MINUTE('19-03-15 10:05:03') | +---------------------------------------------------------+ | 5 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm MONTH() trong SQL có dạng: MONTH(date), trả về tháng từ tham số date được truyền, trong khoảng từ 0 đến 12.
mysql> SELECT MONTH('2019-02-12') +---------------------------------------------------------+ | MONTH('2019-02-12') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm MONTHNAME() trong SQL có dạng MONTHNAME(date), trả về tên tháng của tham số date được truyền.
mysql> SELECT MONTHNAME('2019-02-12'); +---------------------------------------------------------+ | MONTHNAME('2019-02-12') | +---------------------------------------------------------+ | February | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm NOW() trong SQL trả về datetime hiện tại dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDHHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số. Kết quả của hàm là thời gian ở múi giờ hiện tại.
mysql> SELECT NOW(); +---------------------------------------------------------+ | NOW() | +---------------------------------------------------------+ | 2019-03-15 16:50:26 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
PERIOD_ADD() trong SQL có dạng PERIOD_ADD(P,N).
Hàm này thêm số tháng (N) được chỉ định vào một khoảng thời gian (P). P truyền vào dưới định dạng YYMM hoặc YYYYMM và trả về giá trị theo định dạng YYYYMM.
mysql> SELECT PERIOD_ADD(1901,2); +---------------------------------------------------------+ | PERIOD_ADD(1901,2) | +---------------------------------------------------------+ | 201903 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT PERIOD_ADD(201901,2); +---------------------------------------------------------+ | PERIOD_ADD(201901,2) | +---------------------------------------------------------+ | 201903 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
PERIOD_DIFF() trong SQL có dạng: PERIOD_DIFF(P1,P2).
Hàm này trả về số tháng giữa khoảng thời gian P1 và P2 được truyền vào dưới định dạng YYMM hoặc YYYYMM.
mysql> SELECT PERIOD_DIFF(1902,201803); +---------------------------------------------------------+ | PERIOD_DIFF(1902,201803) | +---------------------------------------------------------+ | 11 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm QUARTER() trong SQL có dạng QUARTER(date) trả về quý trong năm từ date được truyền vào, trong khoảng từ 1 đến 4.
mysql> SELECT QUARTER('19-04-01'); +---------------------------------------------------------+ | QUARTER('19-04-01') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm SECOND() trong SQL có dạng SECOND(time) trả về giá trị giây từ tham số time được truyền vào, trong khoảng từ 0 đến 59.
mysql> SELECT SECOND('10:05:03'); +---------------------------------------------------------+ | SECOND('10:05:03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
SEC_TO_TIME() trong SQL có dạng: SEC_TO_TIME(second).
Hàm này trả về giá trị được chuyển đổi từ tham số second đã cho thành giờ, phút và giây có định dạng ‘HH: MM: SS’ hoặc HHMMSS, tuỳ thuộc vào việc hàm này sử dụng chuỗi hay số.
mysql> SELECT SEC_TO_TIME(1202); +---------------------------------------------------------+ | SEC_TO_TIME(1202) | +---------------------------------------------------------+ | 00:20:02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
STR_TO_DATE() trong SQL có dạng: STR_TO_DATE(str,format).
Hàm này ngược với hàm DATE_FORMAT(), trả về một giá trị DATETIME nếu chuỗi str chứa cả hai phần date và time, trả về giá trị DATE hoặc TIME nếu chuỗi chỉ chứa các phần date hoặc time.
mysql> SELECT STR_TO_DATE('03/15/2019', '%m/%d/%Y'); +---------------------------------------------------------+ | STR_TO_DATE('03/15/2019', '%m/%d/%Y') | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT STR_TO_DATE('March 15 2019", '%M %d %Y'); +---------------------------------------------------------+ | STR_TO_DATE('March 15 2019", "%M %d %Y') | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Có 2 dạng hàm SUBDATE:
1. SUBDATE(expr, day)
Trừ một khoảng thời gian nhất định từ tham số thời gian được truyền.
mysql> SELECT SUBDATE('2019-03-15', 31); +---------------------------------------------------------+ | SUBDATE('2019-03-15', 31) | +---------------------------------------------------------+ | 2019-02-12 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
2. SUBDATE(date, interval expr unit)
Khi đối số thứ hai được gọi dưới dạng INTERVAL, hàm SUBDATE() có chức năng giống hàm DATE_SUB().
Ví dụ hàm DATE_SUB sử dụng như này:
mysql> SELECT DATE_SUB('2019-03-15', INTERVAL 31 DAY); +---------------------------------------------------------+ | DATE_SUB('2019-03-15', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 2019-02-12 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Và SUBDATE có chức năng tương tự:
mysql> SELECT SUBDATE('2019-03-15', INTERVAL 31 DAY); +---------------------------------------------------------+ | SUBDATE('2019-03-15', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 2019-02-12 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
SUBTIME() trong SQL có dạng: SUBTIME(expr1,expr2).
Hàm này trả về giá trị thời gian là hiệu của expr1 trừ expr2. Expr1 là một biểu thức dạng time hoặc datetime, còn expr2 là một biểu thức time.
mysql> SELECT SUBTIME('2019-03-31 23:59:59.999999', '1 1:1:1.000002'); +---------------------------------------------------------+ | SUBTIME('2019-03-31 23:59:59.999999', '1 1:1:1.000002') | +---------------------------------------------------------+ | 2019-03-30 22:58:58.999997 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm SYSDATE() trong SQL trả về date và time hiện tại dưới dạng một giá trị có định dạng 'YYYY-MM-DD HH:MM:SS' hoặc YYYYMMDDHHMMSS, phụ thuộc vào hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT SYSDATE(); +---------------------------------------------------------+ | SYSDATE() | +---------------------------------------------------------+ | 2019-03-15 16:47:44 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm TIME() trong SQL có dạng TIME(expr) trả về giá trị thời gian từ biểu thức expr (time hoặc datetime) được truyền vào.
mysql> SELECT TIME('2019-03-15 01:02:03'); +---------------------------------------------------------+ | TIME('2019-03-15 01:02:03') | +---------------------------------------------------------+ | 01:02:03 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
TIMEDIFF() trong SQL có dạng: TIMEDIFF(expr1, expr2).
Hàm này trả về chênh lệch giữa hai giá trị thời gian expr1 và expr2, kết quả được biểu diễn dưới dạng một giá trị time. Hai giá trị thời gian này là các biểu thức time hoặc datetime và cả hai phải cùng một kiểu.
mysql> SELECT TIMEDIFF('2019-03-15 23:59:59.000001', '2019-03-14 01:01:01.000002'); +---------------------------------------------------------+ | TIMEDIFF('2019-03-15 23:59:59.000001', ... | +---------------------------------------------------------+ | 46:58:57.999999 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Có 2 dạng hàm TIMESTAMP:
1. TIMESTAMP(expr)
Khi chỉ có một tham số, hàm TIMESTAMP() trong SQL trả về giá trị datetime với tham số expr có thể là date hoặc datetime.
mysql> SELECT TIMESTAMP("2019-03-15"); +---------------------------------------------------------+ | TIMESTAMP("2019-03-15") | +---------------------------------------------------------+ | 2019-03-15 00:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
2. TIMESTAMP(expr1,expr2)
Khi hàm TIMESTAMP() có hai tham số thì expr2 sẽ được cộng vào expr1 và trả về giá trị datetime.
mysql> SELECT TIMESTAMP("2019-03-15", "26:10:11"); +---------------------------------------------------------+ | TIMESTAMP("2019-03-15", "26:10:11") | +---------------------------------------------------------+ | 2019-03-16 02:10:11 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Trong SQL, hàm TIMESTAMPADD() trả về giá trị datetime mới khi nó được cộng thêm một khoảng thời gian được chỉ định vào tham số thời gian được truyền ban đầu.
Cú pháp TIMESTAMPADD() có dạng: TIMESTAMPADD(unit,interval,datetime_expr).
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2019-03-15'); +---------------------------------------------------------+ | TIMESTAMPADD(MINUTE,1,'2019-03-15') | +---------------------------------------------------------+ | 2019-03-15 00:01:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Cú pháp hàm có dạng: TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2).
Hàm TIMESTAMPDIFF() trong SQL trả về một số nguyên thể hiện sự chênh lệch thời gian giữa hai biểu thức datetime_expr1 và datetime_expr2.
mysql> SELECT TIMESTAMPDIFF(MONTH,'2019-02-01','2019-05-01'); +---------------------------------------------------------+ | TIMESTAMPDIFF(MONTH,'2019-02-01','2019-05-01') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Cú pháp hàm có dạng: TIME_FORMAT(time,format).
Hàm TIME_FORMAT trong SQL được sử dụng như hàm DATE_FORMAT() nhưng tham số format có thể chỉ chứa định dạng giờ, phút và giây.
Specifier | Giải thích |
%f | Microsecond (000000..999999) |
%H | Giờ, dạng giá trị (00..23) |
%h | Giờ, dạng giá trị (01..12) |
%I | Giờ, dạng giá trị (01..12) |
%i | Phút, dạng giá trị số (00..59) |
%p | AM hoặc PM |
%r | Thời gian, 12h (hh:mm:ss được theo sau bởi AM hoặc PM) |
%S | Giây (00..59) |
%s | Giây (00..59) |
%T | Thời gian, 24h (hh:mm:ss) |
Ví dụ:
mysql> SELECT TIME_FORMAT('19:30:10', '%h %i %s %p'); +---------------------------------------------------------+ | TIME_FORMAT('19:30:10', '%h %i %s %p') | +---------------------------------------------------------+ | 07 30 10 PM | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT TIME_FORMAT('19:30:10', '%r'); +---------------------------------------------------------+ | TIME_FORMAT('19:30:10', '%r') | +---------------------------------------------------------+ | 07:30:10 PM | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT TIME_FORMAT('97:15:40','%H %k %h %I %l'); +---------------------------------------------------------+ | TIME_FORMAT('97:15:40','%H %k %h %I %l') | +---------------------------------------------------------+ | 97 97 01 01 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Nếu giá trị time chứa một phần giờ lớn hơn 23 thì ta sử dụng %H và %k để trả về giá trị lớn hơn dãy giá trị thường dùng 0…23.
Hàm TIME_TO_SEC() trong SQL có dạng TIME_TO_SEC(time), trả về số giây được chuyển đổi từ tham số time.
mysql> SELECT TIME_TO_SEC('22:23:00'); +---------------------------------------------------------+ | TIME_TO_SEC('22:23:00') | +---------------------------------------------------------+ | 80580 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm TO_DAYS() trong SQL có dạng TO_DAYS(date), trả về số ngày giữa giá trị thời gian date và năm 0 (tính từ 0000-00-00).
mysql> SELECT TO_DAYS('2019-03-15'); +---------------------------------------------------------+ | TO_DAYS('2019-03-15') | +---------------------------------------------------------+ | 737498 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT TO_DAYS(190316); +---------------------------------------------------------+ | TO_DAYS(190316) | +---------------------------------------------------------+ | 737499 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Có 2 dạng hàm UNIX_TIMESTAMP:
1. UNIX_TIMESTAMP()
Trong SQL, nếu hàm UNIX_TIMESTAMP() không có tham số đi kèm sẽ trả về số giây theo Unix timestamp, tức là số giây kể từ ‘1970-01-01 00:00:00’ UTC tới ngày giờ hiện tại dưới dạng số nguyên không dấu.
mysql> SELECT UNIX_TIMESTAMP(); +---------------------------------------------------------+ | UNIX_TIMESTAMP() | +---------------------------------------------------------+ | 1552677612 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
2. UNIX_TIMESTAMP(date)
Nếu hàm UNIX_TIMESTAMP có tham số date đi kèm, SQL sẽ trả về số giây theo Unix timestamp từ ‘1970-01-01 00:00:00’ UTC tới giá trị ngày giờ date được truyền dưới dạng số nguyên không dấu (date có thể là một chuỗi DATE, DATETIME, TIMESTAMP hay một số ở định dạng YYMMDD hoặc YYYYMMDD).
mysql> SELECT UNIX_TIMESTAMP('1995-02-12 22:23:00'); +---------------------------------------------------------+ | UNIX_TIMESTAMP('1995-02-12 22:23:00') | +---------------------------------------------------------+ | 792627780 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm UTC_DATE() hay UTC_DATE trong SQL trả về ngày UTC hiện tại dưới dạng một giá trị có định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT UTC_DATE(); +---------------------------------------------------------+ | UTC_DATE() | +---------------------------------------------------------+ | 2019-03-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT UTC_DATE() + 0; +---------------------------------------------------------+ | UTC_DATE() + 0 | +---------------------------------------------------------+ | 20190315 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm UTC_TIME() hay UTC_TIME trả về giờ UTC hiện tại dưới dạng một giá trị có định dạng 'HH:MM:SS' hoặc HHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT UTC_TIME(); +---------------------------------------------------------+ | UTC_TIME() | +---------------------------------------------------------+ | 18:07:53 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT UTC_TIME() + 0; +---------------------------------------------------------+ | UTC_TIME() + 0 | +---------------------------------------------------------+ | 180753 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm UTC_TIMESTAMP() hay UTC_TIMESTAMP trả về ngày giờ UTC hiện tại dưới dạng một giá trị có định dạng 'YYYY-MM-DD HH:MM:SS' hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm đang được sử dụng trong ngữ cảnh chuỗi hay số.
mysql> SELECT UTC_TIMESTAMP(); +---------------------------------------------------------+ | UTC_TIMESTAMP() | +---------------------------------------------------------+ | 2019-03-15 18:08:04 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT UTC_TIMESTAMP() + 0; +---------------------------------------------------------+ | UTC_TIMESTAMP() + 0 | +---------------------------------------------------------+ | 20190315180804 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
WEEKDAY() trong SQL có dạng: WEEKDAY(date).
Hàm WEEKDAY() trả về chỉ số ngày trong tuần (0 = Thứ Hai, 1 = Thứ Ba... 6 = Chủ Nhật).
mysql> SELECT WEEKDAY('2019-03-15 22:23:00'); +---------------------------------------------------------+ | WEEKDAY('2019-03-15 22:23:00') | +---------------------------------------------------------+ | 4 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
WEEKOFYEAR() trong SQL có dạng: WEEKOFYEAR(date).
Hàm WEEKOFYEAR() trả về chỉ số tuần của date trong năm là một số nguyên từ 1 đến 53.
mysql> SELECT WEEKOFYEAR('2019-03-15'); +---------------------------------------------------------+ | WEEKOFYEAR('2019-03-15') | +---------------------------------------------------------+ | 11 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Hàm YEAR() trong SQL có dạng YEAR(date), trả về năm tương ứng của tham số date được truyền. Kết quả trả về nằm trong phạm vi 1000 tới 9999.
mysql> SELECT YEAR('19-03-15'); +---------------------------------------------------------+ | YEAR('19-03-15') | +---------------------------------------------------------+ | 2019 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
Trong phần tiếp theo, chúng ta sẽ tìm hiểu về bảng tạm Temporary Table trong SQL, các bạn nhớ theo dõi nhé.
Nhìn chung, dùng hàm DATE và TIME trong SQL không khó. Bạn chỉ cần nắm được cú pháp, cách sử dụng để có thể áp dụng linh hoạt trong nhiều trường hợp.
Hi vọng bài viết hữu ích với các bạn.
Nguồn tin: Quantrimang.com:
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn