Tổng Hợp Các Hàm Xử Lý Date Trong SQL - Deft Blog

Mục lục

  • 1 ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)
  • 2 ADDTIME(expr1,expr2)
  • 3 CONVERT_TZ(dt,from_tz,to_tz)
  • 4 CURDATE()
  • 5 CURRENT_DATE and CURRENT_DATE()
  • 6 CURTIME()
  • 7 CURRENT_TIME and CURRENT_TIME()
  • 8 DATE(expr)
  • 9 DATEDIFF(expr1,expr2)
  • 10 DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)
  • 11 DATE_FORMAT(date,format)
  • 12 DATE_SUB(date,INTERVAL expr unit)
  • 13 DAY(date) 
  • 14 DAYOFMONTH (date)
  • 15 DAYNAME(date)
  • 16 DAYOFWEEK(date)
  • 17 DAYOFYEAR(date)
  • 18 EXTRACT(unit FROM date)
  • 19 FROM_DAYS(N)
  • 20 FROM_UNIXTIME(unix_timestamp)
  • 21 FROM_UNIXTIME(unix_timestamp,format)
  • 22 LAST_DAY(date)
  • 23 LOCALTIME and LOCALTIME()
  • 24 LOCALTIMESTAMP and LOCALTIMESTAMP()
  • 25 MAKEDATE(year,dayofyear)
  • 26 MAKETIME(hour,minute,second)
  • 27 MICROSECOND(expr)
  • 28 MINUTE (thời gian)
  • 29 MONTH(date)
  • 30 MONTHNAME(date)
  • 31 NOW()
  • 32 PERIOD_ADD(P,N)
  • 33 PERIOD_DIFF(P1,P2)
  • 34 SECOND(time)
  • 35 SEC_TO_TIME(seconds)
  • 36 STR_TO_DATE(str,format)
  • 37 SUBDATE(date,INTERVAL expr unit) and SUBDATE(expr,days)
  • 38 SUBTIME(expr1,expr2)
  • 39 SYSDATE()
  • 40 TIME(expr)
  • 41 TIMEDIFF(expr1,expr2)
  • 42 TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
  • 43 TIMESTAMPADD(unit,interval,datetime_expr)
  • 44 TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
  • 45 TIME_FORMAT(time,format)
  • 46 TIME_TO_SEC(time)
  • 47 TO_DAYS(date)
  • 48 UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
  • 49 UTC_DATE, UTC_DATE()
  • 50 UTC_TIME, UTC_TIME()
  • 51 UTC_TIMESTAMP, UTC_TIMESTAMP()
  • 52 WEEK(date[,mode])
  • 53 WEEKDAY(date)
  • 54 WEEKOFYEAR(date)
  • 55 YEAR(date)
  • 56 YEARWEEK(date), YEARWEEK(date,mode)

Việc xử lý ngày tháng trong SQL là một trong những thao tác phức tạp, hiểu được điều này SQL đã hỗ trợ rất nhiều hàm hỗ trợ thao tác với kiểu dữ liệu ngày tháng trong SQL.

ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

Khi được gọi với dạng INTERVAL là tham số thứ hai, ADDDATE () tương đồng với DATE_ADD (). mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); +---------------------------------------------------------+ | DATE_ADD('1998-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 1998-02-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); +---------------------------------------------------------+ | ADDDATE('1998-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 1998-02-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

Khi được gọi với số ngày được cộng thêm là tham số thứ 2, MySQL  ngầm chỉ đinh đây là một số nguyên đại diện cho số ngày được cộng thêm.

mysql> SELECT ADDDATE('1998-01-02', 31); +---------------------------------------------------------+ | DATE_ADD('1998-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 1998-02-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

ADDTIME(expr1,expr2)

ADDTIME () thêm expr2 vào expr1 và trả về kết quả. Expr1 là một biểu thức time hoặc datetime, trong khi expr2 là một time expression.

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002'); +---------------------------------------------------------+ | DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') | +---------------------------------------------------------+ | 1998-01-02 01:01:01.000001 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

CONVERT_TZ(dt,from_tz,to_tz)

Hàm này dùng để chuyển đổi một giá trị kiểu datetime từ múi giờ do from_tz sang múi giờ do to_tz. Nó sẽ trả về NULL nếu các đối số không hợp lệ.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); +---------------------------------------------------------+ | CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') | +---------------------------------------------------------+ | 2004-01-01 13:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); +---------------------------------------------------------+ | CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00') | +---------------------------------------------------------+ | 2004-01-01 22:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

CURDATE()

Trả về ngày hiện tại dưới dạng giá trị ở định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số.

mysql> SELECT CURDATE(); +---------------------------------------------------------+ | CURDATE() | +---------------------------------------------------------+ | 1997-12-15 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CURDATE() + 0; +---------------------------------------------------------+ | CURDATE() + 0 | +---------------------------------------------------------+ | 19971215 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

CURRENT_DATE and CURRENT_DATE()

Hai hàm này có chức năng hoàn toàn giống với CURDATE().

CURTIME()

Trả về thời gian hiện tại dưới dạng giá trị ở định dạng ‘HH: MM: SS’ hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số. Giá trị được biểu thị theo múi giờ hiện tại. mysql> SELECT CURTIME(); +---------------------------------------------------------+ | CURTIME() | +---------------------------------------------------------+ | 23:50:26 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CURTIME() + 0; +---------------------------------------------------------+ | CURTIME() + 0 | +---------------------------------------------------------+ | 235026 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

CURRENT_TIME and CURRENT_TIME()

Hai hàm này có chức năng hoàn toàn giống với CURTIME().

DATE(expr)

Trích xuất dữ liệu Date trong biểu thức Date hay DateTime.

mysql> SELECT DATE('2003-12-31 01:02:03'); +---------------------------------------------------------+ | DATE('2003-12-31 01:02:03') | +---------------------------------------------------------+ | 2003-12-31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DATEDIFF(expr1,expr2)

DATEDIFF(expr1,expr2) được sử dụng để tính khoảng cách giữa 2 ngày với nhau. expr1 và expr2 có thể là một biểu thức dạng Date hoặc DateTime, nhưng chỉ các thành phần thuộc Date(ngày, tháng, năm) được sử dụng để tính toán.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); +---------------------------------------------------------+ | DATEDIFF('1997-12-31 23:59:59','1997-12-30') | +---------------------------------------------------------+ | 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Các hàm này thực hiện số học trong date Ngày là giá trị DATETIME hoặc DATE xác định ngày bắt đầu. Expr là một biểu thức xác định giá trị khoảng thời gian được thêm vào hoặc trừ đi từ ngày bắt đầu. Expr là một chuỗi; nó có thể bắt đầu bằng dấu ‘-‘ cho các khoảng âm.

Unit là một từ khóa chỉ các đơn vị mà biểu thức sẽ được diễn giải.

Từ khóa INTERVAL và từ chỉ định đơn vị không phân biệt chữ hoa chữ thường.

Bảng sau đây cho thấy dạng mong đợi của đối số expr cho mỗi giá trị đơn vị.
unit Value Expected exprFormat
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND ‘SECONDS.MICROSECONDS’
MINUTE_MICROSECOND ‘MINUTES.MICROSECONDS’
MINUTE_SECOND ‘MINUTES:SECONDS’
HOUR_MICROSECOND ‘HOURS.MICROSECONDS’
HOUR_SECOND ‘HOURS:MINUTES:SECONDS’
HOUR_MINUTE ‘HOURS:MINUTES’
DAY_MICROSECOND ‘DAYS.MICROSECONDS’
DAY_SECOND ‘DAYS HOURS:MINUTES:SECONDS’
DAY_MINUTE ‘DAYS HOURS:MINUTES’
DAY_HOUR ‘DAYS HOURS’
YEAR_MONTH ‘YEARS-MONTHS’

Các giá trị QUARTER và WEEK có sẵn từ MySQL 5.0.0. phiên bản.

mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND); +---------------------------------------------------------+ | DATE_ADD('1997-12-31 23:59:59', INTERVAL... | +---------------------------------------------------------+ | 1998-01-01 00:01:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR); +---------------------------------------------------------+ | DATE_ADD('1999-01-01', INTERVAL 1 HOUR) | +---------------------------------------------------------+ | 1999-01-01 01:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DATE_FORMAT(date,format)

Lệnh này định dạng giá trị ngày tháng theo chuỗi định dạng. Các thông số sau có thể được sử dụng trong chuỗi định dạng. Ký tự ‘%’ là bắt buộc trước các ký tự chỉ định định dạng.
1

%a

Abbreviated weekday name (Sun..Sat)

2

%b

Abbreviated month name (Jan..Dec)

3

%c

Month, numeric (0..12)

4

%D

Day of the month with English suffix (0th, 1st, 2nd, 3rd, .)

5

%d

Day of the month, numeric (00..31)

6

%e

Day of the month, numeric (0..31)

7

%f

Microseconds (000000..999999)

8

%H

Hour (00..23)

9

%h

Hour (01..12)

10

%I

Hour (01..12)

11

%i

Minutes, numeric (00..59)

12

%j

Day of year (001..366)

13

%k

Hour (0..23)

14

%l

Hour (1..12)

15

%M

Month name (January..December)

16

%m

Month, numeric (00..12)

17

%p

AM or PM

18

%r

Time, 12-hour (hh:mm:ss followed by AM or PM)

19

%S

Seconds (00..59)

20

%s

Seconds (00..59)

21

%T

Time, 24-hour (hh:mm:ss)

22

%U

Week (00..53), where Sunday is the first day of the week

23

%u

Week (00..53), where Monday is the first day of the week

24

%V

Week (01..53), where Sunday is the first day of the week; used with %X

25

%v

Week (01..53), where Monday is the first day of the week; used with %x

26

%W

Weekday name (Sunday..Saturday)

27

%w

Day of the week (0=Sunday..6=Saturday)

28

%X

Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V

29

%x

Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v

30

%Y

Year, numeric, four digits

31

%y

Year, numeric (two digits)

32

%%DATE_ADD

A literal .%. character

33

%x

x, for any.x. not listed above

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); +---------------------------------------------------------+ | DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') | +---------------------------------------------------------+ | Saturday October 1997 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00' -> '%H %k %I %r %T %S %w'); +---------------------------------------------------------+ | DATE_FORMAT('1997-10-04 22:23:00....... | +---------------------------------------------------------+ | 22 22 10 10:23:00 PM 22:23:00 00 6 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DATE_SUB(date,INTERVAL expr unit)

Tương tự cách hoạt động của hàn DATE_ADD.

DAY(date) 

Tương tự cách hoạt động của hàm DAYOFMONTH().

DAYOFMONTH (date)

Trả về ngày trong tháng cho ngày, trong phạm vi từ 0 đến 31

mysql> SELECT DAYOFMONTH('1998-02-03'); +---------------------------------------------------------+ | DAYOFMONTH('1998-02-03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DAYNAME(date)

Trả về tên của một ngày 

mysql> SELECT DAYNAME('1998-02-05'); +---------------------------------------------------------+ | DAYNAME('1998-02-05') | +---------------------------------------------------------+ | Thursday | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DAYOFWEEK(date)

Trả về chỉ số ngày trong tuần cho ngày (1 = Chủ nhật, 2 = Thứ Hai,., 7 = Thứ Bảy). Các giá trị chỉ số này tương ứng với tiêu chuẩn ODBC

mysql> SELECT DAYOFWEEK('1998-02-03'); +---------------------------------------------------------+ |DAYOFWEEK('1998-02-03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

DAYOFYEAR(date)

Trả về ngày trong năm cho ngày, trong phạm vi từ 1 đến 36

mysql> SELECT DAYOFYEAR('1998-02-03'); +---------------------------------------------------------+ | DAYOFYEAR('1998-02-03') | +---------------------------------------------------------+ | 34 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

EXTRACT(unit FROM date)

Hàm EXTRACT () sử dụng cùng loại mã định đơn vị như DATE_ADD () hoặc DATE_SUB (), nhưng trích xuất các phần từ date.

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02'); +---------------------------------------------------------+ | EXTRACT(YEAR FROM '1999-07-02') | +---------------------------------------------------------+ | 1999 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03'); +---------------------------------------------------------+ | EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03') | +---------------------------------------------------------+ | 199907 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

FROM_DAYS(N)

Cho một số ngày N, trả về giá trị DATE

mysql> SELECT FROM_DAYS(729669); +---------------------------------------------------------+ | FROM_DAYS(729669) | +---------------------------------------------------------+ | 1997-10-07 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

FROM_UNIXTIME(unix_timestamp)

FROM_UNIXTIME(unix_timestamp,format)

  Trả về biểu diễn của đối số unix_timestamp dưới dạng 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 được sử dụng trong chuỗi hay trong ngữ cảnh số. Giá trị được biểu thị theo múi giờ hiện tại. Đối số unix_timestamp là một giá trị dấu thời gian bên trong, được tạo bởi hàm UNIX_TIMESTAMP (). Nếu định dạng được đưa ra, kết quả sẽ được định dạng theo chuỗi định dạng, được sử dụng theo cách giống như được liệt kê trong mục nhập cho hàm DATE_FORMAT ().               mysql> SELECT FROM_UNIXTIME(875996580); +---------------------------------------------------------+ | FROM_UNIXTIME(875996580) | +---------------------------------------------------------+ | 1997-10-04 22:23:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

HOUR(time)

Trả về giờ cho thời gian. Phạm vi của giá trị trả về là 0 đến 23 đối với giá trị thời gian trong ngày. Tuy nhiên, phạm vi giá trị TIME thực sự lớn hơn nhiều, vì vậy HOUR có thể trả về giá trị lớn hơn 23.

mysql> SELECT HOUR('10:05:03'); +---------------------------------------------------------+ | HOUR('10:05:03') | +---------------------------------------------------------+ | 10 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

LAST_DAY(date)

Lấy giá trị ngày tháng hoặc ngày giờ và trả về giá trị tương ứng cho ngày cuối cùng của tháng. Trả về NULL nếu đối số không hợp lệ.

mysql> SELECT LAST_DAY('2003-02-05'); +---------------------------------------------------------+ | LAST_DAY('2003-02-05') | +---------------------------------------------------------+ | 2003-02-28 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

LOCALTIME and LOCALTIME()

Hai hàm này hoạt động tương tự hàm NOW().

LOCALTIMESTAMP and LOCALTIMESTAMP()

Hai hàm này hoạt động tương tự hàm NOW().

MAKEDATE(year,dayofyear)

Trả về một ngày, giá trị năm nhất định và ngày trong năm. Giá trị dayofyear phải lớn hơn 0 nếu không kết quả sẽ là NULL. mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32); +---------------------------------------------------------+ | MAKEDATE(2001,31), MAKEDATE(2001,32) | +---------------------------------------------------------+ | '2001-01-31', '2001-02-01' | +---------------------------------------------------------+ 1 row in set (0.00 sec)

MAKETIME(hour,minute,second)

Trả về giá trị thời gian được tính từ các đối số giờ, phút và giây.

mysql> SELECT MAKETIME(12,15,30); +---------------------------------------------------------+ | MAKETIME(12,15,30) | +---------------------------------------------------------+ | '12:15:30' | +---------------------------------------------------------+ 1 row in set (0.00 sec)

MICROSECOND(expr)

Trả về micro giây từ biểu thức thời gian hoặc ngày giờ (expr) dưới dạng một số trong phạm vi từ 0 đến 999999.

mysql> SELECT MICROSECOND('12:00:00.123456'); +---------------------------------------------------------+ | MICROSECOND('12:00:00.123456') | +---------------------------------------------------------+ | 123456 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

MINUTE (thời gian)

Trả về phút cho thời gian, trong phạm vi từ 0 đến 59.

mysql> SELECT MINUTE('98-02-03 10:05:03'); +---------------------------------------------------------+ | MINUTE('98-02-03 10:05:03') | +---------------------------------------------------------+ | 5 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

MONTH(date)

Trả về tháng cho ngày, trong phạm vi từ 0 đến 12.

mysql> SELECT MONTH('1998-02-03') +---------------------------------------------------------+ | MONTH('1998-02-03') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

MONTHNAME(date)

Trả về tên đầy đủ của tháng cho một ngày.

mysql> SELECT MONTHNAME('1998-02-05'); +---------------------------------------------------------+ | MONTHNAME('1998-02-05') | +---------------------------------------------------------+ | February | +---------------------------------------------------------+ 1 row in set (0.00 sec)

NOW()

Trả về ngày và giờ hiện tại dưới dạng giá trị ở định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số. Giá trị này được biểu thị bằng múi giờ hiện tại.

mysql> SELECT NOW(); +---------------------------------------------------------+ | NOW() | +---------------------------------------------------------+ | 1997-12-15 23:50:26 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

PERIOD_ADD(P,N)

Thêm N tháng vào khoảng thời gian P (ở định dạng YYMM hoặc YYYYMM). Trả về một giá trị ở định dạng YYYYMM. Lưu ý rằng đối số khoảng thời gian P không phải là giá trị ngày tháng. mysql> SELECT PERIOD_ADD(9801,2); +---------------------------------------------------------+ | PERIOD_ADD(9801,2) | +---------------------------------------------------------+ | 199803 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

PERIOD_DIFF(P1,P2)

Trả về số tháng giữa các khoảng thời gian P1 và P2. Các khoảng thời gian P1 và P2 này phải ở định dạng YYMM hoặc YYYYMM. Lưu ý rằng các đối số dấu chấm P1 và P2 không phải là giá trị ngày tháng.

mysql> SELECT PERIOD_DIFF(9802,199703); +---------------------------------------------------------+ | PERIOD_DIFF(9802,199703) | +---------------------------------------------------------+ | 11 | +---------------------------------------------------------+ 1 row in set (0.00 sec) QUARTER (date) Trả về phần tư của năm cho ngày, trong phạm vi từ 1 đến 4. mysql> SELECT QUARTER('98-04-01'); +---------------------------------------------------------+ | QUARTER('98-04-01') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

SECOND(time)

Trả về số giây, trong phạm vi 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(seconds)

Trả về đối số giây, được chuyển đổi thành giờ, phút và giây, dưới dạng giá trị ở định dạng ‘HH: MM: SS’ hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số. mysql> SELECT SEC_TO_TIME(2378); +---------------------------------------------------------+ | SEC_TO_TIME(2378) | +---------------------------------------------------------+ | 00:39:38 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

STR_TO_DATE(str,format)

Đây là nghịch đảo của hàm DATE_FORMAT (). Nó có một chuỗi str và một định dạng chuỗi định dạng. Hàm STR_TO_DATE () trả về giá trị DATETIME nếu chuỗi định dạng chứa cả phần ngày và giờ. Ngược lại, nó trả về giá trị DATE hoặc TIME nếu chuỗi chỉ chứa các phần ngày hoặc giờ.

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); +---------------------------------------------------------+ | STR_TO_DATE('04/31/2004', '%m/%d/%Y') | +---------------------------------------------------------+ | 2004-04-31 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

SUBDATE(date,INTERVAL expr unit) and SUBDATE(expr,days)

Khi được gọi với dạng INTERVAL của đối số thứ hai, SUBDATE () là một từ đồng nghĩa với DATE_SUB (). Để biết thông tin về đối số đơn vị INTERVAL, hãy xem thảo luận cho DATE_ADD (). mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); +---------------------------------------------------------+ | DATE_SUB('1998-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 1997-12-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY); +---------------------------------------------------------+ | SUBDATE('1998-01-02', INTERVAL 31 DAY) | +---------------------------------------------------------+ | 1997-12-02 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

SUBTIME(expr1,expr2)

Hàm SUBTIME () trả về expr1. expr2 được biểu thị dưới dạng một giá trị có cùng định dạng với expr1. Giá trị expr1 là một biểu thức thời gian hoặc ngày tháng, trong khi giá trị expr2 là một biểu thức thời gian.

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999', -> '1 1:1:1.000002'); +---------------------------------------------------------+ | SUBTIME('1997-12-31 23:59:59.999999'... | +---------------------------------------------------------+ | 1997-12-30 22:58:58.999997 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

SYSDATE()

Trả về ngày và giờ hiện tại dưới dạng giá trị ở định dạng ‘YYYY-MM-DD HH: MM: SS’ hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số

mysql> SELECT SYSDATE(); +---------------------------------------------------------+ | SYSDATE() | +---------------------------------------------------------+ | 2006-04-12 13:47:44 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIME(expr)

Trích xuất phần thời gian của biểu thức thời gian hoặc ngày giờ expr và trả về nó dưới dạng một chuỗi.

mysql> SELECT TIME('2003-12-31 01:02:03'); +---------------------------------------------------------+ | TIME('2003-12-31 01:02:03') | +---------------------------------------------------------+ | 01:02:03 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIMEDIFF(expr1,expr2)

Hàm TIMEDIFF () trả về expr1. expr2 được biểu thị dưới dạng giá trị thời gian. Các giá trị expr1 và expr2 này là thời gian hoặc biểu thức ngày và giờ, nhưng cả hai phải cùng loại.

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001', -> '1997-12-30 01:01:01.000002'); +---------------------------------------------------------+ | TIMEDIFF('1997-12-31 23:59:59.000001'..... | +---------------------------------------------------------+ | 46:58:57.999999 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

Với một đối số duy nhất, hàm này trả về ngày tháng hoặc biểu thức datetime expr dưới dạng giá trị datetime. Với hai đối số, nó thêm biểu thức thời gian expr2 vào ngày tháng hoặc biểu thức ngày giờ expr1 và trả về kết quả dưới dạng giá trị ngày giờ.

mysql> SELECT TIMESTAMP('2003-12-31'); +---------------------------------------------------------+ | TIMESTAMP('2003-12-31') | +---------------------------------------------------------+ | 2003-12-31 00:00:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIMESTAMPADD(unit,interval,datetime_expr)

Hàm này thêm khoảng biểu thức số nguyên vào ngày hoặc biểu thức ngày giờ datetime_expr. Đơn vị cho khoảng thời gian được đưa ra bởi đối số đơn vị, phải là một trong các giá trị sau:

  • FRAC_SECOND
  • SECOND, MINUTE
  • HOUR, DAY
  • WEEK
  • MONTH
  • QUARTER or
  • YEAR

Giá trị đơn vị có thể được chỉ định bằng cách sử dụng một trong các từ khóa như được hiển thị hoặc với tiền tố SQL_TSI_.

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02'); +---------------------------------------------------------+ | TIMESTAMPADD(MINUTE,1,'2003-01-02') | +---------------------------------------------------------+ | 2003-01-02 00:01:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Trả về sự khác biệt số nguyên giữa ngày tháng hoặc biểu thức ngày giờ datetime_expr1 và datetime_expr2. Đơn vị cho kết quả được đưa ra bởi đối số đơn vị. Các giá trị pháp lý cho đơn vị giống như các giá trị được liệt kê trong mô tả của hàm TIMESTAMPADD ().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); +---------------------------------------------------------+ | TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIME_FORMAT(time,format)

Hàm này được sử dụng giống như hàm DATE_FORMAT (), nhưng chuỗi định dạng chỉ có thể chứa các từ định dạng cho giờ, phút và giây. Nếu giá trị thời gian chứa một phần giờ lớn hơn 23, các mã định dạng% H và% k giờ tạo ra giá trị lớn hơn phạm vi thông thường từ 0 đến 23. Các mã định dạng giờ khác tạo ra mô-đun giá trị giờ 12.

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l'); +---------------------------------------------------------+ | TIME_FORMAT('100:00:00', '%H %k %h %I %l') | +---------------------------------------------------------+ | 100 100 04 04 4 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TIME_TO_SEC(time)

Trả về đối số thời gian được chuyển đổi thành giây.

mysql> SELECT TIME_TO_SEC('22:23:00'); +---------------------------------------------------------+ | TIME_TO_SEC('22:23:00') | +---------------------------------------------------------+ | 80580 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

TO_DAYS(date)

Đã cho một ngày, trả về một số ngày (số ngày kể từ năm 0).

mysql> SELECT TO_DAYS(950501); +---------------------------------------------------------+ | TO_DAYS(950501) | +---------------------------------------------------------+ | 728779 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

Nếu được gọi không có đối số, hàm này trả về dấu thời gian Unix (giây kể từ ‘1970-01-01 00:00:00’ UTC) dưới dạng số nguyên không dấu. Nếu UNIX_TIMESTAMP () được gọi với đối số ngày, nó sẽ trả về giá trị của đối số dưới dạng giây kể từ ‘1970-01-01 00:00:00’ UTC. ngày có thể là chuỗi DATE, chuỗi DATETIME, TIMESTAMP hoặc một số ở định dạng YYMMDD hoặc YYYYMMDD.

mysql> SELECT UNIX_TIMESTAMP(); +---------------------------------------------------------+ | UNIX_TIMESTAMP() | +---------------------------------------------------------+ | 882226357 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); +---------------------------------------------------------+ | UNIX_TIMESTAMP('1997-10-04 22:23:00') | +---------------------------------------------------------+ | 875996580 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

UTC_DATE, UTC_DATE()

Trả về ngày UTC hiện tại dưới dạng giá trị ở định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số.

mysql> SELECT UTC_DATE(), UTC_DATE() + 0; +---------------------------------------------------------+ | UTC_DATE(), UTC_DATE() + 0 | +---------------------------------------------------------+ | 2003-08-14, 20030814 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

UTC_TIME, UTC_TIME()

Trả về thời gian UTC hiện tại dưới dạng giá trị ở định dạng ‘HH: MM: SS’ hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số.

mysql> SELECT UTC_TIME(), UTC_TIME() + 0; +---------------------------------------------------------+ | UTC_TIME(), UTC_TIME() + 0 | +---------------------------------------------------------+ | 18:07:53, 180753 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

UTC_TIMESTAMP, UTC_TIMESTAMP()

Trả về ngày và giờ UTC hiện tại dưới dạng giá trị trong ‘YYYY-MM-DD HH: MM: SS’ hoặc ở định dạng YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số.

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0; +---------------------------------------------------------+ | UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0 | +---------------------------------------------------------+ | 2003-08-14 18:08:04, 20030814180804 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

WEEK(date[,mode])

Hàm này trả về số tuần cho ngày. Dạng hai đối số của WEEK () cho phép bạn chỉ định tuần bắt đầu vào Chủ Nhật hay Thứ Hai và giá trị trả về phải nằm trong phạm vi từ 0 đến 53 hoặc từ 1 đến 53. Nếu đối số chế độ bị bỏ qua, giá trị của biến hệ thống default_week_format được sử dụngHàm này trả về số tuần cho ngày. Dạng hai đối số của WEEK () cho phép bạn chỉ định tuần bắt đầu vào Chủ Nhật hay Thứ Hai và giá trị trả về phải nằm trong phạm vi từ 0 đến 53 hoặc từ 1 đến 53. Nếu đối số chế độ bị bỏ qua, giá trị của biến hệ thống default_week_format được sử dụng.

Mode First Day of week Range Week 1 is the first week.
0 Sunday 0-53 with a Sunday in this year
1 Monday 0-53 with more than 3 days this year
2 Sunday 1-53 with a Sunday in this year
3 Monday 1-53 with more than 3 days this year
4 Sunday 0-53 with more than 3 days this year
5 Monday 0-53 with a Monday in this year
6 Sunday 1-53 with more than 3 days this year
7 Monday 1-53 with a Monday in this year

 

mysql> SELECT WEEK('1998-02-20'); +---------------------------------------------------------+ | WEEK('1998-02-20') | +---------------------------------------------------------+ | 7 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

WEEKDAY(date)

Trả về chỉ số ngày trong tuần cho ngày (0 = Thứ Hai, 1 = Thứ Ba,. 6 = Chủ Nhật).

mysql> SELECT WEEKDAY('1998-02-03 22:23:00'); +---------------------------------------------------------+ | WEEKDAY('1998-02-03 22:23:00') | +---------------------------------------------------------+ | 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

WEEKOFYEAR(date)

Trả về tuần lịch của ngày dưới dạng một số trong phạm vi từ 1 đến 53. WEEKOFYEAR () là một hàm tương thích tương đương với WEEK (ngày, 3).

mysql> SELECT WEEKDAY('1998-02-03 22:23:00'); +---------------------------------------------------------+ | WEEKDAY('1998-02-03 22:23:00') | +---------------------------------------------------------+ | 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

YEAR(date)

Trả về năm cho ngày, trong phạm vi 1000 đến 9999 hoặc 0 cho .zero. ngày.

mysql> SELECT YEAR('98-02-03'); +---------------------------------------------------------+ | YEAR('98-02-03') | +---------------------------------------------------------+ | 1998 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

YEARWEEK(date), YEARWEEK(date,mode)

Trả về năm và tuần cho một ngày. Đối số mode hoạt động chính xác như đối số mode đối với hàm WEEK (). Năm trong kết quả có thể khác với năm trong đối số ngày cho tuần đầu tiên và tuần cuối cùng của năm.

mysql> SELECT YEARWEEK('1987-01-01'); +---------------------------------------------------------+ | YEAR('98-02-03')YEARWEEK('1987-01-01') | +---------------------------------------------------------+ | 198653 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

Lưu ý – Số tuần khác với số mà hàm WEEK () sẽ trả về (0) cho các đối số tùy chọn 0 hoặc 1, vì WEEK () sau đó trả về tuần trong ngữ cảnh của năm nhất định.

Nguồn tham khảo

https://www.tutorialspoint.com/sql/sql-date-functions.htm

Từ khóa » Hàm Tách Ngày Tháng Năm Trong Sql