首页 > 数据库 >mysql的时间函数

mysql的时间函数

时间:2023-10-23 18:15:33浏览次数:56  
标签:12 函数 HOUR 日期 DATE ADD 时间 mysql date

mysql中的时间函数

  一、EXTRACT(type FROM date)

  EXTRACT(type FROM date)表示从日期时间数据“date”中抽取“type”指定的部分。

  eg:

1 -- 按小时统计销售金额和销售数量
2 SELECT  EXTRACT(HOUR FROM b.transdate) AS 时段, SUM(a.quantity) AS 数量, 
3 SUM(a.salesvalue) AS 金额 
4 FROM 
5 demo.transactiondetails a 
6 JOIN
7 demo.transactionhead b ON (a.transactionid = b.transactionid)
8 GROUP BY EXTRACT(HOUR FROM b.transdate) 
9 ORDER BY EXTRACT(HOUR FROM b.transdate);

  查询的过程是这样的:

  1、从交易时间中抽取小时信息:EXTRACT(HOUR FROM b.transdate);

  2、按交易的小时信息分组;

  3、按分组统计销售数量和销售金额的和;

  4、按交易的小时信息排序。

  二、HOUR(time)

  HOUR(time)表示从日期时间“time”中,获取小时部分信息。

  需要注意的是,EXTRACT() 函数中的“HOUR”表示要获取时间的类型,而 HOUR() 是一个函数,HOUR(time) 可以单独使用,表示返回 time 的小时部分信息。

  上面的例子可以用HOUR()改写:

SELECT
HOUR(b.transdate) AS 时段, -- 改为使用HOUR函数
SUM(a.quantity) AS 数量,
SUM(a.salesvalue) AS 金额
FROM
demo.transactiondetails a
JOIN
demo.transactionhead b ON (a.transactionid = b.transactionid)
GROUP BY HOUR(b.transdate) -- 改写为HOUR函数
ORDER BY HOUR(b.transdate);-- 改写为HOUR函数

  当然,mysql中不止有hour(),还有其他的:

  YEAR(date):获取 date 中的年。

  MONTH(date):获取 date 中的月。

  DAY(date):获取 date 中的日。

  HOUR(date):获取 date 中的小时。

  MINUTE(date):获取 date 中的分。

  SECOND(date):获取 date 中的秒。

  三、时间计算

  1、DATE_ADD(date, INTERVAL 表达式 type)

  DATE_ADD(date, INTERVAL 表达式 type):表示计算从时间点“date”开始,向前或者向后一段时间间隔的时间。“表达式”的值为时间间隔数,正数表示向后,负数表示向前,“type”表示时间间隔的单位(比如年、月、日等)。

  比如获取上一年的日期:

SELECT DATE_ADD('2023-12-10', INTERVAL - 1 YEAR);

  还有稍微复杂点的例子,比如获取2023-12-10的上一年上个月的日期

SELECT DATE_ADD(DATE_ADD('2020-12-10', INTERVAL - 1 YEAR),INTERVAL - 1 MONTH);

  2、LAST_DAY(date)

  LAST_DAY(date):表示获取日期时间“date”所在月份的最后一天的日期。

  比如获取2023-12-10的当前12月的最后一天的日期

SELECT LAST_DAY('2023-12-10')

  有些时候我们可能需要将两个结合下:

SELECT DATE_ADD(LAST_DAY(DATE_ADD(DATE_ADD('2023-12-10', INTERVAL - 1 YEAR),INTERVAL - 1 MONTH)),INTERVAL 1 DAY)

  查询过程如下:

  1)用 DATE_ADD 函数,获取到 2023 年 12 月 10 日上一年的日期:2022 年 12 月 10 日

  2)获取 2022 年 12 月 10 日这个时间节点开始上个月的日期,这样做的目的是方便获取月份的起始时间

  3)获取 2022 年 11 月 10 日这个时间点月份的最后一天,继续接近我们的目标:2022 年 12 月 01 日

  4)计算 2022 年 11 月 30 日后一天的日期。

  简单小结下:

  我们可以用 DATE_ADD() 来计算从某个时间点开始,过去或者未来一个时间间隔的时间;通过 LAST_DAY() 函数,获得某个时间节点当月的最后一天的日期。借助它们,我们就可以获取从某个时间节点出发的指定月份的起始日期和截止日期。

  除了 DATE_ADD(),ADDDATE()、DATE_SUB() 和 SUBDATE() 也能达到同样的效果。

  ADDDATE():跟 DATE_ADD() 用法一致;

  DATE_SUB(),SUBDATE():与 DATE_ADD() 用法类似,方向相反,执行日期的减操作。

  3、其他的一些函数

  CURDATE():获取当前的日期。日期格式为“YYYY-MM-DD”,也就是年月日的格式。

  DAYOFWEEK(date):获取日期“date”是周几。1 表示周日,2 表示周一,以此类推,直到 7 表示周六。

CASE DAYOFWEEK(CURDATE()) - 1 WHEN 0 THEN 7 ELSE DAYOFWEEK(CURDATE()) - 1 END AS 周几,

  DATE_FORMAT(),它表示将日期时间“date”按照指定格式显示。

SELECT DATE_FORMAT("2023-12-01 13:25:50","%T");

  常见的mysql日期格式见:链接

   DATEDIFF(date1,date2)表示日期“date1”与日期“date2”之间差几天。

SELECT DATEDIFF("2021-02-01","2020-12-01");

  总结

 

标签:12,函数,HOUR,日期,DATE,ADD,时间,mysql,date
From: https://www.cnblogs.com/xshan/p/17782994.html

相关文章

  • Mysql新增分区-Python版
    importdatetimeimportsysimportpandasaspdimportpymysqlimportsqlalchemy.engine.urlasengineUrlfromsqlalchemyimportcreate_engineDB_INFO={"host":"IP","port":3306,"username":"ro......
  • isinstance()函数
    """isinstanc()内置函数1、用途:isinstance()函数,判断一个对象是否是一个已知的类型,类似于type()2、语法:isinstance(object,classinfo)object:实例对象classinfo:可以是直接或者间接的类名,基本类型或者由它们组成的元组返回值:True,False3、type()与isinstance()区别type()是......
  • mysql 自定义函数的调用及赋值
    函数调用:select函数名(参数);函数返回值赋值:set变量名=(select函数名(参数));select函数名(参数)into变量名;示例:自定义函数内容 selecttest4(5)intoaa;setbb=(selecttest4(10));selectaa,bb; ......
  • mysql log_bin_trust_function_creators
    原文链接:https://blog.csdn.net/ayqy42602/article/details/98770328在本地Mysql中创建函数时,报错如下:thisfunctionhasnoneofdeterministic,nosql,orreadssqldatainitsdeclarationandbinaryloggingisenabled(you*might*wanttousethelesssafelog_bin_......
  • JS 函数的扩展
    函数参数的默认值基本用法ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。functionlog(x,y){y=y||'World';console.log(x,y);}log('Hello')//HelloWorldlog('Hello','China')//HelloChinalog('Hello','')//......
  • Mysql隔离事务
    1.四大隔离事务 类型一:RU(READ-UNCOMMITTED表示读未提交)可以读取到事务未提交的数据,隔离性差,会出现脏读(当前内存读),不可重复读,幻读问题;类型二:RC(READ-COMMITTED表示读已提交)可以读取到事务已提交的数据,隔离性一般,不会出现脏读问题,但是会出现不可重复读,幻读问题;类型......
  • [转]setTimeout 和 setInterval 的定时时间深入研究
    原文地址:setTimeout和setInterval的定时时间深入研究-知乎setInterval() -间隔指定的毫秒数不停地执行指定的代码(一直执行)。setTimeout() -在指定的毫秒数后执行指定代码(只执行一次)。使用setInterVal:functiondoStuff(){//此处为需要执行一段时间T......
  • Cygwin/WSL调用Windows schtasks命令操作Windows计划任务系列函数(查询、启用、禁用、
    新增、删除、查询任务计划#wintask-query#根据任务名称关键词查询Windows计划任务#wintask-del#根据任务名称关键词删除Windows计划任务,也可以传递计划任务完整路径#wintask-run#根据任务名称关键词立即运行Windows计划任务#wintask-enable#根据任务名称......
  • MySQL CTE递归查询 Data too long for colum‘xxx‘ at row 1
    在mysql8使用 CTE递归查询时,出现了这个报错WITHrecursiveareaAS(SELECTarea_name,area_codeFROMsys_area_treeWHEREarea_category='1'ANDparent_codeISNULLUNIONALLSELECTconcat(t1.area_name,'/',t.area_name),t.area_code......
  • 视频直播系统源码,在Laravel中自定义模板函数 并在模板中调用
    视频直播系统源码,在Laravel中自定义模板函数并在模板中调用第一步:在app/bootstrap下定义一个php文件 diy_helpers.php​内容如下: <?phpfunctioncssVersion($data){  $version="1.01";  return$data."?v=".$version;}functionjsVersion($data){  $ver......