찾다
데이터 베이스MySQL 튜토리얼MySQL 기초 튜토리얼 9 — 날짜 및 시간 함수

다음 예에서는 시간 함수를 사용합니다. 다음 쿼리는 지난 30일 이내에 date_col 값이 있는 모든 레코드를 선택합니다.

mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;


이 쿼리는 날짜가 미래인 레코드도 선택할 수 있습니다.

날짜 값에 대한 함수는 일반적으로 시간 날짜 값을 허용하고 시간 부분을 무시합니다. 그리고 시간 값에 대한 함수는 일반적으로 시간 날짜 값을 받아들이고 날짜 부분을 무시합니다.

해당 현재 날짜 또는 시간을 반환하는 함수는 각 쿼리 실행 시작 시 한 번 평가됩니다. 이는 단일 쿼리 내에서 NOW()와 같은 함수에 대한 다중 액세스가 항상 호출되는 모든 서브루틴의 동일한 결과를 제공한다는 것을 의미합니다. 이 원칙은 CURDATE(), CURTIME(), UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP() 및 동일한 의미를 갖는 모든 함수에도 적용됩니다.

CURRENT_TIMESTAMP(), CURRENT_TIME(), CURRENT_DATE() 및 FROM_UNIXTIME() 함수는 연결의 현재 시간대 값을 반환합니다. 이 값은 time_zone 시스템 변수의 값으로 사용할 수 있습니다. 또한 UNIX_TIMESTAMP()는 해당 인수가 현재 시간대의 날짜 및 시간 값이라고 가정합니다.

다음 함수 설명의 반환 값 범위는 전체 날짜를 요청합니다. 날짜에 "0" 값이 있거나 '2001-11-00'과 같이 불완전한 날짜인 경우 부분 날짜 값을 추출하는 함수가 0을 반환할 수 있습니다. 예를 들어 DAYOFMONTH('2001-11-00')은 0을 반환합니다.

  • ADDDATE(날짜,INTERVAL expr 유형) ADDDATE(expr,days)

두 번째 매개변수의 INTERVAL 형식으로 활성화되면 ADDDATE()는 DATE_ADD()와 동의어입니다. 관련 함수 SUBDATE()는 DATE_SUB()의 동의어입니다. INTERVAL 매개변수에 대한 자세한 내용은 DATE_ADD()에 대한 설명을 참조하세요.

mysql> SELECT DATE_ADD(&#39;1998-01-02&#39;, INTERVAL 31 DAY);
-> &#39;1998-02-02&#39;
mysql> SELECT ADDDATE(&#39;1998-01-02&#39;, INTERVAL 31 DAY);
-> &#39;1998-02-02&#39;
若 days 参数只是整数值,则 MySQL 5.1将其作为天数值添加至 expr。
mysql> SELECT ADDDATE(&#39;1998-01-02&#39;, 31);
-> &#39;1998-02-02&#39;
  • ADDTIME(expr,expr2)

ADDTIME()은 expr2expr에 추가되고 결과가 반환됩니다. expr은 시간 또는 시간 날짜 표현이고 expr2는 시간 표현입니다.

rreee
  • CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ() 시간 및 날짜 값 dtfrom_tz에서 지정한 시간대에서 to_tz에서 지정한 시간대로 변환한 후 결과 값을 반환합니다. . 인수가 유효하지 않은 경우 이 함수는 NULL을 반환합니다.

iffrom_tz에서 UTC로 변환하는 과정에서 해당 값이 TIMESTAMP 유형이 지원하는 범위를 초과하면 변환이 발생하지 않습니다.

mysql> SELECT ADDTIME(&#39;1997-12-31 23:59:59.999999&#39;,
->                &#39;1 1:1:1.000002&#39;);
-> &#39;1998-01-02 01:01:01.000001&#39;
mysql> SELECT ADDTIME(&#39;01:00:00.999999&#39;, &#39;02:00:00.999998&#39;);
-> &#39;03:00:01.999997&#39;

참고: 'MET' 또는 'Europe/Moscow'와 같은 지정된 시간대를 사용하려면 먼저 올바른 시간대 테이블을 설정하세요.

  • CURDATE()

'YYYY-MM-DD' 또는 YYYYMMDD 형식으로 현재 날짜를 반환합니다. 구체적인 형식은 결정됩니다. 함수에 따라 다릅니다. 문자열인지 숫자인지에 따라 다릅니다.

mysql> SELECT CONVERT_TZ(&#39;2004-01-01 12:00:00&#39;,&#39;GMT&#39;,&#39;MET&#39;);
-> &#39;2004-01-01 13:00:00&#39;
mysql> SELECT CONVERT_TZ(&#39;2004-01-01 12:00:00&#39;,&#39;+00:00&#39;,&#39;+10:00&#39;);
-> &#39;2004-01-01 22:00:00&#39;
  • CURRENT_DATE CURRENT_DATE()

CURRENT_DATE와 CURRENT_DATE()는 동의어입니다.

  • CURTIME ()

'HH:MM:SS' 또는 HHMMSS 형식으로 현재 시간을 반환합니다. 구체적인 형식은 함수가 문자열 컨텍스트에서 사용되는지 아니면 숫자 컨텍스트에서 사용되는지에 따라 다릅니다.

mysql> SELECT CURDATE();
-> &#39;1997-12-15&#39;
mysql> SELECT CURDATE() + 0;
-> 19971215
  • CURRENT_TIME, CURRENT_TIME()

CURRENT_TIME 및 CURRENT_TIME()은 CURTIME()의 동의어입니다.

  • CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP 및 CURRENT_TIMESTAMP()는 NOW()의 동의어입니다.

  • DATE(expr)

날짜 표현식 expr 날짜 부분에서 날짜 또는 시간 추출 .

mysql> SELECT CURTIME();
-> &#39;23:50:26&#39;
mysql> SELECT CURTIME() + 0;
-> 235026
  • DATEDIFF(expr,expr2)

DATEDIFF() 시작 시간을 반환합니다. expr과 종료 시간 expr2 사이의 일수입니다. Exprexpr2는 날짜 또는 날짜 및 시간 표현식입니다. 이 값 중 날짜 부분만 계산에 사용됩니다.

mysql> SELECT DATE(&#39;2003-12-31 01:02:03&#39;);
-> &#39;2003-12-31&#39;
  • DATE_ADD(날짜,INTERVAL expr 유형) DATE_SUB(날짜,INTERVAL expr type)

이 함수는 날짜 연산을 수행합니다. 날짜는 시작 시간을 지정하는 데 사용되는 DATETIME 또는 DATE 값입니다. expr은 시작 날짜에서 더하거나 뺄 시간 간격 값을 지정하는 표현식입니다. Expr은 문자열입니다. 음수 간격의 경우 '-'로 시작할 수 있습니다. type은 표현식이 어떻게 해석되는지를 나타내는 키워드입니다.

키워드 INTERVA와 type 분류자는 대소문자를 구분하지 않습니다.

다음 표는 typeexpr 매개변수 사이의 관계를 보여줍니다.

type  预期的 expr 格式
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'
유형 예상 expr 형식 마이크로초 마이크로초 초 초 분 분 시간 시간 일 일 주 주 월 월 분기 분기 연도 연도 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 '연-월'

MySQL 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 DATE 值,而你的计算只会包括 YEAR、MONTH和DAY部分(即, 没有时间部分), 其结果是一个DATE 值。否则,结果将是一个 DATETIME值。

若位于另一端的表达式是一个日期或日期时间值 , 则INTERVAL expr type只允许在 + 操作符的两端。对于 –操作符,  INTERVAL expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。 (见下面的例子)。

mysql> SELECT &#39;1997-12-31 23:59:59&#39; + INTERVAL 1 SECOND;
-> &#39;1998-01-01 00:00:00&#39;
mysql> SELECT INTERVAL 1 DAY + &#39;1997-12-31&#39;;
-> &#39;1998-01-01&#39;
mysql> SELECT &#39;1998-01-01&#39; - INTERVAL 1 SECOND;
-> &#39;1997-12-31 23:59:59&#39;
mysql> SELECT DATE_ADD(&#39;1997-12-31 23:59:59&#39;,
->                 INTERVAL 1 SECOND);
-> &#39;1998-01-01 00:00:00&#39;
mysql> SELECT DATE_ADD(&#39;1997-12-31 23:59:59&#39;,
->                 INTERVAL 1 DAY);
-> &#39;1998-01-01 23:59:59&#39;
mysql> SELECT DATE_ADD(&#39;1997-12-31 23:59:59&#39;,
->                 INTERVAL &#39;1:1&#39; MINUTE_SECOND);
-> &#39;1998-01-01 00:01:00&#39;
mysql> SELECT DATE_SUB(&#39;1998-01-01 00:00:00&#39;,
->                 INTERVAL &#39;1 1:1:1&#39; DAY_SECOND);
-> &#39;1997-12-30 22:58:59&#39;
mysql> SELECT DATE_ADD(&#39;1998-01-01 00:00:00&#39;,
->                 INTERVAL &#39;-1 10&#39; DAY_HOUR);
-> &#39;1997-12-30 14:00:00&#39;
mysql> SELECT DATE_SUB(&#39;1998-01-02&#39;, INTERVAL 31 DAY);
-> &#39;1997-12-02&#39;
mysql> SELECT DATE_ADD(&#39;1992-12-31 23:59:59.000002&#39;,
->            INTERVAL &#39;1.999999&#39; SECOND_MICROSECOND);
-> &#39;1993-01-01 00:00:01.000001&#39;

若你指定了一个过于短的时间间隔值 (不包括type 关键词所预期的所有时间间隔部分), MySQL 假定你已经省去了时间间隔值的最左部分。 例如,你指定了一种类型的DAY_SECOND, expr 的值预期应当具有天、 小时、分钟和秒部分。若你指定了一个类似 '1:10'的值, MySQL 假定天和小时部分不存在,那么这个值代表分和秒。换言之, '1:10' DAY_SECOND 被解释为相当于 '1:10' MINUTE_SECOND。这相当于 MySQL将TIME 值解释为所耗费的时间而不是日时的解释方式。

假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值:

mysql> SELECT DATE_ADD(&#39;1999-01-01&#39;, INTERVAL 1 DAY);
-> &#39;1999-01-02&#39;
mysql> SELECT DATE_ADD(&#39;1999-01-01&#39;, INTERVAL 1 HOUR);
-> &#39;1999-01-01 01:00:00&#39;

假如你使用了格式严重错误的日期,则结果为 NULL。假如你添加了  MONTH、YEAR_MONTH或YEAR ,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期:

mysql> SELECT DATE_ADD(&#39;1998-01-30&#39;, INTERVAL 1 MONTH);
-> &#39;1998-02-28&#39;
  • DATE_FORMAT(date,format)

根据format 字符串安排date 值的格式。

以下说明符可用在 format 字符串中:

说明符 说明
%a 工作日的缩写名称  (Sun..Sat)
%b 月份的缩写名称  (Jan..Dec)
%c 月份,数字形式(0..12)
%D 带有英语后缀的该月日期  (0th, 1st, 2nd, 3rd, ...)
%d 该月日期, 数字形式 (00..31)
%e 该月日期, 数字形式(0..31)
%f 微秒 (000000..999999)
%H 小时(00..23)
%h 小时(01..12)
%I 小时 (01..12)
%i 分钟,数字形式 (00..59)
%j 一年中的天数 (001..366)
%k 小时 (0..23)
%l 小时 (1..12)
%M 月份名称 (January..December)
%m 月份, 数字形式 (00..12)
%p 上午(AM)或下午( PM)
%r 时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM)
%S 秒 (00..59)
%s 秒 (00..59)
%T 时间 , 24小时制 (小时hh:分钟mm:秒数ss)
%U 周 (00..53), 其中周日为每周的第一天
%u 周 (00..53), 其中周一为每周的第一天
%V 周 (01..53), 其中周日为每周的第一天 ; 和 %X同时使用
%v 周 (01..53), 其中周一为每周的第一天 ; 和 %x同时使用
%W 工作日名称 (周日..周六)
%w 一周中的每日 (0=周日..6=周六)
%X 该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用
%x 该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用
%Y 年份, 数字形式,4位数
%y 年份, 数字形式 (2位数)
%% ‘%’文字字符

所有其它字符都被复制到结果中,无需作出解释。

注意, ‘%’字符要求在格式指定符之前。

月份和日期说明符的范围从零开始,原因是 MySQL允许存储诸如 '2004-00-00'的不完全日期.

mysql> SELECT DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;, &#39;%W %M %Y&#39;);        -> &#39;Saturday October 1997&#39;
mysql> SELECT DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;, &#39;%H:%i:%s&#39;);        -> &#39;22:23:00&#39;
mysql> SELECT DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;,                          &#39;%D %y %a %d %m %b %j&#39;);
        -> &#39;4th 97 Sat 04 10 Oct 277&#39;
mysql> SELECT DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;,                          &#39;%H %k %I %r %T %S %w&#39;);
        -> &#39;22 22 10 10:23:00 PM 22:23:00 00 6&#39;
mysql> SELECT DATE_FORMAT(&#39;1999-01-01&#39;, &#39;%X %V&#39;);        -> &#39;1998 52&#39;
  • DAY(date)

DAY() 和DAYOFMONTH()的意义相同。

  • DAYNAME(date)

返回date 对应的工作日名称。

mysql> SELECT DAYNAME(&#39;1998-02-05&#39;);
-> &#39;周四&#39;
  • DAYOFMONTH(date)

返回date 对应的该月日期,范围是从 1到31。

mysql> SELECT DAYOFMONTH(&#39;1998-02-03&#39;);
-> 3
  • DAYOFWEEK(date)

返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。这些索引值符合 ODBC标准。

mysql> SELECT DAYOFWEEK(&#39;1998-02-03&#39;);
-> 3
  • DAYOFYEAR(date)

返回date 对应的一年中的天数,范围是从 1到366。

mysql> SELECT DAYOFYEAR(&#39;1998-02-03&#39;);
-> 34
  • EXTRACT(type FROM date)

EXTRACT()函数所使用的时间间隔类型说明符同 DATE_ADD()或DATE_SUB()的相同,但它从日期中提取其部分,而不是执行日期运算。

mysql> SELECT EXTRACT(YEAR FROM &#39;1999-07-02&#39;);
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM &#39;1999-07-02 01:02:03&#39;);
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM &#39;1999-07-02 01:02:03&#39;);
-> 20102
mysql> SELECT EXTRACT(MICROSECOND
->                FROM &#39;2003-01-02 10:30:00.00123&#39;);
-> 123
  • FROM_DAYS(N)

给定一个天数  N, 返回一个DATE值。

mysql> SELECT FROM_DAYS(729669);

-> '1997-10-07'

使用 FROM_DAYS()处理古老日期时,务必谨慎。他不用于处理阳历出现前的日期(1582)。

  • FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)

返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。

format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。

mysql> SELECT FROM_UNIXTIME(875996580);
-> &#39;1997-10-04 22:23:00&#39;
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
->                      &#39;%Y %D %M %h:%i:%s %x&#39;);
-> &#39;2003 6th August 06:22:58 2003&#39;
  • GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')

返回一个格式字符串。这个函数在同DATE_FORMAT() 及STR_TO_DATE()函数结合时很有用。

第一个参数的3个可能值和第二个参数的5个可能值产生 15 个可能格式字符串 (对于使用的说明符,请参见DATE_FORMAT()函数说明表 )。

函数调用 结果
GET_FORMAT(DATE,'USA') '%m.%d.%Y'
GET_FORMAT(DATE,'JIS') '%Y-%m-%d'
GET_FORMAT(DATE,'ISO') '%Y-%m-%d'
GET_FORMAT(DATE,'EUR') '%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL') '%Y%m%d'
GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA') '%h:%i:%s %p'
GET_FORMAT(TIME,'JIS') '%H:%i:%s'
GET_FORMAT(TIME,'ISO') '%H:%i:%s'
GET_FORMAT(TIME,'EUR') '%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL') '%H%i%s'

ISO 格式为ISO 9075, 而非ISO 8601.

也可以使用TIMESTAMP, 这时GET_FORMAT()的返回值和DATETIME相同。

mysql> SELECT DATE_FORMAT(&#39;2003-10-03&#39;,GET_FORMAT(DATE,&#39;EUR&#39;));
-> &#39;03.10.2003&#39;
mysql> SELECT STR_TO_DATE(&#39;10.31.2003&#39;,GET_FORMAT(DATE,&#39;USA&#39;));
-> &#39;2003-10-31&#39;
  • HOUR(time)

返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23 。

mysql> SELECT HOUR('10:05:03');

-> 10

然而,  TIME 值的范围实际上非常大, 所以HOUR可以返回大于23的值。

mysql> SELECT HOUR('272:59:59');

-> 272

  • LAST_DAY(date)

获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回NULL。

mysql> SELECT LAST_DAY(&#39;2003-02-05&#39;);
-> &#39;2003-02-28&#39;
mysql> SELECT LAST_DAY(&#39;2004-02-05&#39;);
-> &#39;2004-02-29&#39;
mysql> SELECT LAST_DAY(&#39;2004-01-01 01:01:01&#39;);
-> &#39;2004-01-31&#39;
mysql> SELECT LAST_DAY(&#39;2003-03-32&#39;);
-> NULL
  • LOCALTIME, LOCALTIME()

LOCALTIME 及 LOCALTIME()和NOW()具有相同意义。

  • LOCALTIMESTAMP, LOCALTIMESTAMP()

LOCALTIMESTAMP和LOCALTIMESTAMP()和NOW()具有相同意义。

  • MAKEDATE(year,dayofyear)

给出年份值和一年中的天数值,返回一个日期。dayofyear 必须大于 0 ,否则结果为 NULL。

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
-> &#39;2001-01-31&#39;, &#39;2001-02-01&#39;
mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);
-> &#39;2001-12-31&#39;, &#39;2004-12-30&#39;
mysql> SELECT MAKEDATE(2001,0);
-> NULL
  • MAKETIME(hour,minute,second)

返回由hour、 minutesecond 参数计算得出的时间值。

mysql> SELECT MAKETIME(12,15,30);
-> &#39;12:15:30&#39;
  • MICROSECOND(expr)

从时间或日期时间表达式expr返回微秒值,其数字范围从 0到 999999。

mysql> SELECT MICROSECOND(&#39;12:00:00.123456&#39;);
-> 123456
mysql> SELECT MICROSECOND(&#39;1997-12-31 23:59:59.000010&#39;);
-> 10
  • MINUTE(time)

返回 time 对应的分钟数,范围是从 0 到 59。

mysql> SELECT MINUTE(&#39;98-02-03 10:05:03&#39;);
-> 5
  • MONTH(date)

返回date 对应的月份,范围时从 1 到 12。

mysql> SELECT MONTH(&#39;1998-02-03&#39;);
-> 2
  • MONTHNAME(date)

返回date 对应月份的全名。

mysql> SELECT MONTHNAME(&#39;1998-02-05&#39;);
-> &#39;February &#39;
  • NOW()

返回当前日期和时间值,其格式为 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS , 具体格式取决于该函数是否用在字符串中或数字语境中。

mysql> SELECT NOW();
-> &#39;1997-12-15 23:50:26&#39;
mysql> SELECT NOW() + 0;
-> 19971215235026

在一个存储程序或触发器内, NOW() 返回一个常数时间,该常数指示了该程序或触发语句开始执行的时间。这同SYSDATE()的运行有所不同。

  • PERIOD_ADD(P,N)

添加 N 个月至周期P (格式为YYMM 或YYYYMM),返回值的格式为 YYYYMM。注意周期参数 P 不是日期值。

mysql> SELECT PERIOD_ADD(9801,2);
-> 199803
  • PERIOD_DIFF(P1,P2)

返回周期P1和 P2 之间的月份数。P1 和P2 的格式应该为YYMM或YYYYMM。注意周期参数 P1P2 不是日期值。

mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11
  • QUARTER(date)

返回date 对应的一年中的季度值,范围是从 1到 4。

mysql> SELECT QUARTER(&#39;98-04-01&#39;);
-> 2
  • SECOND(time)

返回time 对应的秒数, 范围是从 0到59。

mysql> SELECT SECOND(&#39;10:05:03&#39;);
-> 3
  • SEC_TO_TIME(seconds)

返回被转化为小时、 分钟和秒数的seconds参数值, 其格式为 'HH:MM:SS' 或HHMMSS,具体格式根据该函数是否用在字符串或数字语境中而定。

mysql> SELECT SEC_TO_TIME(2378);
-> &#39;00:39:38&#39;
mysql> SELECT SEC_TO_TIME(2378) + 0;
-> 3938
  • STR_TO_DATE(str,format)

这是DATE_FORMAT() 函数的倒转。它获取一个字符串 str 和一个格式字符串format。若格式字符串包含日期和时间部分,则 STR_TO_DATE()返回一个 DATETIME 值, 若该字符串只包含日期部分或时间部分,则返回一个 DATE 或TIME值。

str所包含的日期、时间或日期时间值应该在format指示的格式中被给定。对于可用在format中的说明符,请参见DATE_FORMAT() 函数说明表。 所有其它的字符被逐字获取,因此不会被解释。若 str 包含一个非法日期、时间或日期时间值,则 STR_TO_DATE()返回NULL。同时,一个非法值会引起警告。

其意义是,例如, 只要具体日期部分的范围时从 1到 31之间,则允许一个日期中的具体日期部分大于一个月中天数值。并且,允许“零”日期或带有0值部分的日期。

mysql> SELECT STR_TO_DATE(&#39;00/00/0000&#39;, &#39;%m/%d/%Y&#39;);
-> &#39;0000-00-00&#39;
mysql> SELECT STR_TO_DATE(&#39;04/31/2004&#39;, &#39;%m/%d/%Y&#39;);
-> &#39;2004-04-31&#39;
  • SUBDATE(date,INTERVAL expr type) SUBDATE(expr,days)

当被第二个参数的 INTERVAL型式调用时, SUBDATE()和DATE_SUB()的意义相同。对于有关INTERVAL参数的信息, 见有关 DATE_ADD()的讨论。

mysql> SELECT DATE_SUB(&#39;1998-01-02&#39;, INTERVAL 31 DAY);
-> &#39;1997-12-02&#39;
mysql> SELECT SUBDATE(&#39;1998-01-02&#39;, INTERVAL 31 DAY);
-> &#39;1997-12-02&#39;

第二个形式允许对days使用整数值。在这些情况下,它被算作由日期或日期时间表达式 expr中提取的天数。

mysql> SELECT SUBDATE(&#39;1998-01-02 12:00:00&#39;, 31);
-> &#39;1997-12-02 12:00:00&#39;

注意不能使用格式 "%X%V" 来将一个 year-week 字符串转化为一个日期,原因是当一个星期跨越一个月份界限时,一个年和星期的组合不能标示一个唯一的年和月份。若要将year-week转化为一个日期,则也应指定具体工作日:

mysql> select str_to_date(&#39;200442 Monday&#39;, &#39;%X%V %W&#39;);
-> 2004-10-18
  • SUBTIME(expr,expr2)

SUBTIME()从expr 中提取expr2 ,然后返回结果。expr 是一个时间或日期时间表达式,而xpr2 是一个时间表达式。

mysql> SELECT SUBTIME(&#39;1997-12-31 23:59:59.999999&#39;,&#39;1 1:1:1.000002&#39;);
-> &#39;1997-12-30 22:58:58.999997&#39;
mysql> SELECT SUBTIME(&#39;01:00:00.999999&#39;, &#39;02:00:00.999998&#39;);
-> &#39;-00:59:59.999999&#39;
  • SYSDATE()

返回当前日期和时间值,格式为'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS, 具体格式根据函数是否用在字符串或数字语境而定。

在一个存储程序或触发器中, SYSDATE()返回其执行的时间, 而非存储成都或触发语句开始执行的时间。这个NOW()的运作有所不同。

  • TIME(expr)

提取一个时间或日期时间表达式的时间部分,并将其以字符串形式返回。

mysql> SELECT TIME(&#39;2003-12-31 01:02:03&#39;);
-> &#39;01:02:03&#39;
mysql> SELECT TIME(&#39;2003-12-31 01:02:03.000123&#39;);
-> &#39;01:02:03.000123&#39;
  • TIMEDIFF(expr,expr2)

TIMEDIFF() 返回起始时间 expr 和结束时间expr2 之间的时间。 expr 和expr2 为时间或 date-and-time 表达式,两个的类型必须一样。

mysql> SELECT TIMEDIFF(&#39;2000:01:01 00:00:00&#39;,
->                 &#39;2000:01:01 00:00:00.000001&#39;);
-> &#39;-00:00:00.000001&#39;
mysql> SELECT TIMEDIFF(&#39;1997-12-31 23:59:59.000001&#39;,
->                 &#39;1997-12-30 01:01:01.000002&#39;);
-> &#39;46:58:57.999999&#39;
  • TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

对于一个单参数,该函数将日期或日期时间表达式 expr 作为日期时间值返回.对于两个参数, 它将时间表达式 expr2 添加到日期或日期时间表达式 expr 中,将theresult作为日期时间值返回。

mysql> SELECT TIMESTAMP(&#39;2003-12-31&#39;);
-> &#39;2003-12-31 00:00:00&#39;
mysql> SELECT TIMESTAMP(&#39;2003-12-31 12:00:00&#39;,&#39;12:00:00&#39;);
-> &#39;2004-01-01 00:00:00&#39;
  • TIMESTAMPADD(interval,int_expr,datetime_expr)

将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。 int_expr 的单位被时间间隔参数给定,该参数必须是以下值的其中一个: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

可使用所显示的关键词指定Interval值,或使用SQL_TSI_前缀。例如, DAY或SQL_TSI_DAY 都是正确的。

mysql> SELECT TIMESTAMPADD(MINUTE,1,&#39;2003-01-02&#39;);
-> &#39;2003-01-02 00:01:00&#39;
mysql> SELECT TIMESTAMPADD(WEEK,1,&#39;2003-01-02&#39;);
-> &#39;2003-01-09&#39;
  • TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同。

mysql> SELECT TIMESTAMPDIFF(MONTH,&#39;2003-02-01&#39;,&#39;2003-05-01&#39;);
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,&#39;2002-05-01&#39;,&#39;2001-01-01&#39;);
-> -1
  • TIME_FORMAT(time,format)

其使用和 DATE_FORMAT()函数相同, 然而format 字符串可能仅会包含处理小时、分钟和秒的格式说明符。其它说明符产生一个NULL值或0。

time value包含一个大于23的小时部分,则 %H 和 %k 小时格式说明符会产生一个大于0..23的通常范围的值。另一个小时格式说明符产生小时值模数12。

mysql> SELECT TIME_FORMAT(&#39;100:00:00&#39;, &#39;%H %k %h %I %l&#39;);
-> &#39;100 100 04 04 4&#39;
  • TIME_TO_SEC(time)

返回已转化为秒的time参数。

mysql> SELECT TIME_TO_SEC(&#39;22:23:00&#39;);
-> 80580
mysql> SELECT TIME_TO_SEC(&#39;00:39:38&#39;);
-> 2378
  • TO_DAYS(date)

给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS(&#39;1997-10-07&#39;);
-> 729669

TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。

请记住, MySQL使用“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如,  '1997-10-07'和'97-10-07' 被视为同样的日期:

mysql> SELECT TO_DAYS(&#39;1997-10-07&#39;), TO_DAYS(&#39;97-10-07&#39;);
-> 729669, 729669

对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。

  • UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

若无参数调用,则返回一个Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP(&#39;1997-10-04 22:23:00&#39;);
-> 875996580

当 UNIX_TIMESTAMP被用在 TIMESTAMP列时, 函数直接返回内部时戳值,  而不进行任何隐含的 “string-to-Unix-timestamp”转化。假如你向UNIX_TIMESTAMP()传递一个溢出日期,它会返回 0,但请注意只有基本范围检查会被履行(年份从1970 到 2037, 月份从01到12,日期从  01 到31)。

假如你想要减去 UNIX_TIMESTAMP() 列, 你或许希望删去带符号整数的结果。

  • UTC_DATE, UTC_DATE()

返回当前 UTC日期值,其格式为 'YYYY-MM-DD' 或 YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> &#39;2003-08-14&#39;, 20030814
  • UTC_TIME, UTC_TIME()

返回当前 UTC 值,其格式为  'HH:MM:SS' 或HHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> &#39;18:07:53&#39;, 180753
  • UTC_TIMESTAMP, UTC_TIMESTAMP()

返回当前UTC日期及时间值,格式为 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> &#39;2003-08-14 18:08:04&#39;, 20030814180804
  • WEEK(date[,mode])

该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值。

以下表说明了mode 参数的工作过程:d


第一天

Mode 工作日 范围 Week 1 为第一周 ...
0 周日 0-53 本年度中有一个周日
1 周一 0-53 本年度中有3天以上
2 周日 1-53 本年度中有一个周日
3 周一 1-53 本年度中有3天以上
4 周日 0-53 本年度中有3天以上
5 周一 0-53 本年度中有一个周一
6 周日 1-53 本年度中有3天以上
7 周一 1-53 本年度中有一个周一
mysql> SELECT WEEK(&#39;1998-02-20&#39;);
-> 7
mysql> SELECT WEEK(&#39;1998-02-20&#39;,0);
-> 7
mysql> SELECT WEEK(&#39;1998-02-20&#39;,1);
-> 8
mysql> SELECT WEEK(&#39;1998-12-31&#39;,1);
-> 53

注意,假如有一个日期位于前一年的最后一周, 若你不使用2、3、6或7作为mode 参数选择,则MySQL返回 0:

mysql> SELECT YEAR(&#39;2000-01-01&#39;), WEEK(&#39;2000-01-01&#39;,0);
-> 2000, 0

有人或许会提出意见,认为 MySQL 对于WEEK() 函数应该返回 52 ,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回“给定年份的星期数”。这使得WEEK() 函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。

假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。

mysql> SELECT WEEK(&#39;2000-01-01&#39;,2);
-> 52
作为选择,可使用 YEARWEEK()函数:
mysql> SELECT YEARWEEK(&#39;2000-01-01&#39;);
-> 199952
mysql> SELECT MID(YEARWEEK(&#39;2000-01-01&#39;),5,2);
-> &#39;52&#39;
  • WEEKDAY(date)

返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引  weekday index for

mysql> SELECT WEEKDAY(&#39;1998-02-03 22:23:00&#39;);
-> 1
mysql> SELECT WEEKDAY(&#39;1997-11-05&#39;);
-> 2
  • WEEKOFYEAR(date)

将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。

mysql> SELECT WEEKOFYEAR(&#39;1998-02-20&#39;);
-> 8
  • YEAR(date)

返回date 对应的年份,范围是从1000到9999。

mysql> SELECT YEAR(&#39;98-02-03&#39;);
-> 1998
  • YEARWEEK(date), YEARWEEK(date,start)

返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。

mysql> SELECT YEARWEEK('1987-01-01');

-> 198653

注意,周数和WEEK()函数队可选参数0或 1可能会返回的(0) w有所不同,原因是此时 WEEK() 返回给定年份的语境中的周。


  • -> &#39;1997-10-07&#39;

 以上就是MySQL基础教程9 —— 函数之日期和时间函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
InnoDB Redo Logs 및 Undo Logs의 역할을 설명하십시오.InnoDB Redo Logs 및 Undo Logs의 역할을 설명하십시오.Apr 15, 2025 am 12:16 AM

InnoDB는 Redologs 및 Undologs를 사용하여 데이터 일관성과 신뢰성을 보장합니다. 1. Redologs는 사고 복구 및 거래 지속성을 보장하기 위해 데이터 페이지 수정을 기록합니다. 2. 결점은 원래 데이터 값을 기록하고 트랜잭션 롤백 및 MVCC를 지원합니다.

설명 출력 (유형, 키, 행, 추가)에서 찾아야 할 주요 메트릭은 무엇입니까?설명 출력 (유형, 키, 행, 추가)에서 찾아야 할 주요 메트릭은 무엇입니까?Apr 15, 2025 am 12:15 AM

설명 명령에 대한 주요 메트릭에는 유형, 키, 행 및 추가가 포함됩니다. 1) 유형은 쿼리의 액세스 유형을 반영합니다. 값이 높을수록 Const와 같은 효율이 높아집니다. 2) 키는 사용 된 인덱스를 표시하고 NULL은 인덱스가 없음을 나타냅니다. 3) 행은 스캔 한 행의 수를 추정하여 쿼리 성능에 영향을 미칩니다. 4) Extra는 최적화해야한다는 Filesort 프롬프트 사용과 같은 추가 정보를 제공합니다.

설명에서 임시 상태를 사용하고 피하는 방법은 무엇입니까?설명에서 임시 상태를 사용하고 피하는 방법은 무엇입니까?Apr 15, 2025 am 12:14 AM

Temporary를 사용하면 MySQL 쿼리에 임시 테이블을 생성해야 할 필요성이 있으며, 이는 별개의, 그룹 비 또는 비 인덱스 열을 사용하여 순서대로 발견됩니다. 인덱스 발생을 피하고 쿼리를 다시 작성하고 쿼리 성능을 향상시킬 수 있습니다. 구체적으로, 설명 출력에 사용되는 경우, MySQL은 쿼리를 처리하기 위해 임시 테이블을 만들어야 함을 의미합니다. 이것은 일반적으로 다음과 같은 경우에 발생합니다. 1) 별개 또는 그룹을 사용할 때 중복 제거 또는 그룹화; 2) OrderBy가 비 인덱스 열이 포함되어있을 때 정렬하십시오. 3) 복잡한 하위 쿼리 또는 조인 작업을 사용하십시오. 최적화 방법은 다음과 같습니다. 1) Orderby 및 GroupB

다른 SQL 트랜잭션 격리 수준 (커밋되지 않은 읽기, 읽기, 커밋 가능한 읽기, 반복 가능한 읽기, 시리얼이즈 가능) 및 MySQL/innoDB에서의 의미를 설명하십시오.다른 SQL 트랜잭션 격리 수준 (커밋되지 않은 읽기, 읽기, 커밋 가능한 읽기, 반복 가능한 읽기, 시리얼이즈 가능) 및 MySQL/innoDB에서의 의미를 설명하십시오.Apr 15, 2025 am 12:11 AM

MySQL/InnoDB는 4 개의 트랜잭션 격리 수준을 지원합니다. Readuncommitted, ReadCommitted, ReturableRead 및 Serializable. 1. READUCMITTED는 커밋되지 않은 데이터를 읽을 수 있으므로 더러운 판독 값을 유발할 수 있습니다. 2. ReadCommitted는 더러운 읽기를 피하지만 반복 할 수없는 독서가 발생할 수 있습니다. 3. RepeatableRead는 더러운 읽기와 반복 할 수없는 독서를 피하는 기본 레벨이지만 팬텀 독서가 발생할 수 있습니다. 4. 직렬화 가능한 것은 모든 동시성 문제를 피하지만 동시성을 줄입니다. 적절한 격리 수준을 선택하려면 균형 잡힌 데이터 일관성 및 성능 요구 사항이 필요합니다.

MySQL 대 기타 데이터베이스 : 옵션 비교MySQL 대 기타 데이터베이스 : 옵션 비교Apr 15, 2025 am 12:08 AM

MySQL은 웹 응용 프로그램 및 컨텐츠 관리 시스템에 적합하며 오픈 소스, 고성능 및 사용 편의성에 인기가 있습니다. 1) PostgreSQL과 비교하여 MySQL은 간단한 쿼리 및 높은 동시 읽기 작업에서 더 잘 수행합니다. 2) Oracle과 비교할 때 MySQL은 오픈 소스와 저렴한 비용으로 인해 중소 기업에서 더 인기가 있습니다. 3) Microsoft SQL Server와 비교하여 MySQL은 크로스 플랫폼 응용 프로그램에 더 적합합니다. 4) MongoDB와 달리 MySQL은 구조화 된 데이터 및 트랜잭션 처리에 더 적합합니다.

MySQL Index Cardinality는 쿼리 성능에 어떤 영향을 미칩니 까?MySQL Index Cardinality는 쿼리 성능에 어떤 영향을 미칩니 까?Apr 14, 2025 am 12:18 AM

MySQL Index Cardinality는 쿼리 성능에 중대한 영향을 미칩니다. 1. 높은 카디널리티 인덱스는 데이터 범위를보다 효과적으로 좁히고 쿼리 효율성을 향상시킬 수 있습니다. 2. 낮은 카디널리티 인덱스는 전체 테이블 스캔으로 이어질 수 있으며 쿼리 성능을 줄일 수 있습니다. 3. 관절 지수에서는 쿼리를 최적화하기 위해 높은 카디널리티 시퀀스를 앞에 놓아야합니다.

MySQL : 신규 사용자를위한 리소스 및 튜토리얼MySQL : 신규 사용자를위한 리소스 및 튜토리얼Apr 14, 2025 am 12:16 AM

MySQL 학습 경로에는 기본 지식, 핵심 개념, 사용 예제 및 최적화 기술이 포함됩니다. 1) 테이블, 행, 열 및 SQL 쿼리와 같은 기본 개념을 이해합니다. 2) MySQL의 정의, 작업 원칙 및 장점을 배우십시오. 3) 인덱스 및 저장 절차와 같은 기본 CRUD 작업 및 고급 사용량을 마스터합니다. 4) 인덱스의 합리적 사용 및 최적화 쿼리와 같은 일반적인 오류 디버깅 및 성능 최적화 제안에 익숙합니다. 이 단계를 통해 MySQL의 사용 및 최적화를 완전히 파악할 수 있습니다.

실제 MySQL : 예 및 사용 사례실제 MySQL : 예 및 사용 사례Apr 14, 2025 am 12:15 AM

MySQL의 실제 응용 프로그램에는 기본 데이터베이스 설계 및 복잡한 쿼리 최적화가 포함됩니다. 1) 기본 사용 : 사용자 정보 삽입, 쿼리, 업데이트 및 삭제와 같은 사용자 데이터를 저장하고 관리하는 데 사용됩니다. 2) 고급 사용 : 전자 상거래 플랫폼의 주문 및 재고 관리와 같은 복잡한 비즈니스 로직을 처리합니다. 3) 성능 최적화 : 인덱스, 파티션 테이블 및 쿼리 캐시를 사용하여 합리적으로 성능을 향상시킵니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구