MySql week函数具体用法
- 格式:docx
- 大小:17.03 KB
- 文档页数:5
MySQL常⽤函数⼤全讲解MySQL数据库中提供了很丰富的函数。
MySQL函数包括数学函数、字符串函数、⽇期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。
通过这些函数,可以简化⽤户的操作。
例如,字符串连接函数可以很⽅便的将多个字符串连接在⼀起。
在这⼀讲中将讲解的内容包括:数学函数字符串函数⽇期和时间函数条件判断函数系统信息函数加密函数格式化函数MySQL函数是MySQL数据库提供的内部函数。
这些内部函数可以帮助⽤户更加⽅便的处理表中的数据。
本⼩节中将简单介绍MySQL中包含哪⼏类函数,以及这⼏类函数的的使⽤范围和作⽤。
MySQL函数包括数学函数、字符串函数、⽇期和时间函数、条件判断函数、系统信息函数、加密函数等。
SELECT语句及其条件表达式都可以使⽤这些函数。
同时,INSERT 、UPDATE、DELECT语句及其条件表达式也可以使⽤这些函数。
例如,表中的某个数据是负数,现在需要将这个数据显⽰为正数。
这就可以使⽤绝对值函数。
从上⾯可以知道,MySQL函数可以对表中数据进⾏相应的处理,以便得到⽤户希望得到的数据。
这些函数可以使MySQL数据库的功能更加强⼤。
⼀、数学函数数学函数是MySQL中常⽤的⼀类函数。
主要⽤于处理数字,包括整型、浮点数等。
数学函数包括绝对值函数、正弦函数、余弦函数、获取随机数的函数等。
ABS(X):返回X的绝对值select ABS(-32);MOD(N,M)或%:返回N被M除的余数。
select MOD(15,7);select 15 % 7;FLOOR(X):返回不⼤于X的最⼤整数值。
select FLOOR(1.23);select FLOOR(-1.23);CEILING(X):返回不⼩于X的最⼩整数值。
select CEILING(1.23);select CEILING(-1.23);ROUND(X) :返回参数X的四舍五⼊的⼀个整数。
select ROUND(1.58);select ROUND(-1.58);⼆、字符串函数ASCII(str):返回字符串str的最左⾯字符的ASCII代码值。
sql weekday函数SQL是一种用于管理关系型数据库的编程语言,在数据管理和数据分析领域应用广泛。
SQL的功能非常强大,能够实现数据的增删改查、数据分析等多种操作。
weekday函数是SQL中的一个非常实用的函数,作用是返回指定日期的星期几。
```WEEKDAY(date)```参数说明:date:要获取星期几的日期。
返回值类型:整型,返回0-6的数字,0代表星期一,1代表星期二,以此类推,6代表星期日。
下面通过示例来详细讲解如何使用SQL的weekday函数。
1、查询当前日期的星期几解释:NOW()函数返回当前日期和时间,WEEKDAY()函数返回当前日期的星期几。
```SELECT WEEKDAY('2022-01-01');```解释:查询2022年1月1日是星期几。
4、将星期几转换为对应的中文名称在实际编程中,有些情况下需要将星期几从数字形式转换为中文形式,可以使用SQL的CASE语句实现。
```SELECT CASE WEEKDAY('2022-01-01')WHEN 0 THEN '星期一'WHEN 1 THEN '星期二'WHEN 2 THEN '星期三'WHEN 3 THEN '星期四'WHEN 4 THEN '星期五'WHEN 5 THEN '星期六'ELSE '星期日'END as '中文星期';```5、查询一周中每一天的数据使用weekday函数可以轻松查询一周中每一天的数据。
解释:查询2022年1月1日到2022年1月7日之间每天的销售数据,并将每天的日期和对应的中文星期输出。
在实际开发中,应用weekday函数可以让我们更轻松地处理日期相关的业务逻辑,提高开发效率。
总结:SQL weekday函数是非常实用的函数之一,它可以轻松地获取指定日期的星期几,并可以配合其它函数和语句,实现更复杂的业务逻辑。
MySQL统计函数记录——按⽉、按季度、按⽇、时间段统计以及MySQL⽇期时间函数⼤全DAYOFWEEK(date) 返回⽇期date是星期⼏(1=星期天,2=星期⼀,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03'); -> 3WEEKDAY(date) 返回⽇期date是星期⼏(0=星期⼀,1=星期⼆,……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5mysql> select WEEKDAY('1997-11-05'); -> 2DAYOFMONTH(date) 返回date是⼀⽉中的第⼏⽇(在1到31范围内)mysql> select DAYOFMONTH('1998-02-03'); -> 3DAYOFYEAR(date) 返回date是⼀年中的第⼏⽇(在1到366范围内)mysql> select DAYOFYEAR('1998-02-03'); -> 34MONTH(date) 返回date中的⽉份数值mysql> select MONTH('1998-02-03'); -> 2DAYNAME(date) 返回date是星期⼏(按英⽂名返回)mysql> select DAYNAME("1998-02-05"); -> 'Thursday'MONTHNAME(date) 返回date是⼏⽉(按英⽂名返回)mysql> select MONTHNAME("1998-02-05"); -> 'February'QUARTER(date) 返回date是⼀年的第⼏个季度mysql> select QUARTER('98-04-01'); -> 2WEEK(date,first) 返回date是⼀年的第⼏周(first默认值0,first取值1表⽰周⼀是周的开始,0从周⽇开始)mysql> select WEEK('1998-02-20'); -> 7mysql> select WEEK('1998-02-20',0); -> 7mysql> select WEEK('1998-02-20',1); -> 8YEAR(date) 返回date的年份(范围在1000到9999)mysql> select YEAR('98-02-03'); -> 1998HOUR(time) 返回time的⼩时数(范围是0到23)mysql> select HOUR('10:05:03'); -> 10MINUTE(time) 返回time的分钟数(范围是0到59)mysql> select MINUTE('98-02-03 10:05:03'); -> 5SECOND(time) 返回time的秒数(范围是0到59)mysql> select SECOND('10:05:03'); -> 3PERIOD_ADD(P,N) 增加N个⽉到时期P并返回(P的格式YYMM或YYYYMM)mysql> select PERIOD_ADD(9801,2); -> 199803PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间⽉数(P1和P2的格式YYMM或YYYYMM)mysql> select PERIOD_DIFF(9802,199703); -> 11DATE_ADD(date,INTERVAL expr type)DATE_SUB(date,INTERVAL expr type)ADDDATE(date,INTERVAL expr type)SUBDATE(date,INTERVAL expr type) 对⽇期时间进⾏加减法运算 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以⽤运算符和-⽽不是函数 date是⼀个DATETIME或DATE值,expr对date进⾏加减法的⼀个表达式字符串type指明表达式expr应该如何被解释 [type值含义期望的expr格式]: SECOND 秒 SECONDS MINUTE 分钟 MINUTES HOUR 时间 HOURS DAY 天 DAYS MONTH ⽉ MONTHS YEAR 年 YEARS MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" HOUR_MINUTE ⼩时和分钟 "HOURS:MINUTES" DAY_HOUR 天和⼩时 "DAYS HOURS" YEAR_MONTH 年和⽉ "YEARS-MONTHS" HOUR_SECOND ⼩时, 分钟, "HOURS:MINUTES:SECONDS" DAY_MINUTE 天, ⼩时, 分钟 "DAYS HOURS:MINUTES" DAY_SECOND 天, ⼩时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS" expr中允许任何标点做分隔符,如果所有是DATE值时结果是⼀个DATE值,否则结果是⼀个DATETIME值) 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少⼩时分钟等于MINUTE_SECOND) 如果增加MONTH、YEAR_MONTH或YEAR,天数⼤于结果⽉份的最⼤天数则使⽤最⼤天数)mysql> SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND; -> 1998-01-01 00:00:00mysql> SELECT INTERVAL 1 DAY "1997-12-31"; -> 1998-01-01mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; -> 1997-12-31 23:59:59mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); -> 1998-01-01 00:00:00mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY); -> 1998-01-01 23:59:59mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); -> 1999mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); -> 199907mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); -> 20102TO_DAYS(date) 返回⽇期date是西元0年⾄今多少天(不计算1582年以前)mysql> select TO_DAYS(950501); -> 728779mysql> select TO_DAYS('1997-10-07'); -> 729669FROM_DAYS(N) 给出西元0年⾄今多少天返回DATE值(不计算1582年以前)mysql> select FROM_DAYS(729669); -> '1997-10-07'DATE_FORMAT(date,format) 根据format字符串格式化date值 (在format字符串中可⽤标志符: %M ⽉名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英语前缀的⽉份的⽇期(1st, 2nd, 3rd, 等等。
add_weeks函数用法
add_weeks函数是一个用于在日期上添加指定周数的函数。
其
基本用法是将一个日期和要添加的周数作为参数传递给函数,然后
函数将返回添加指定周数后的日期。
add_weeks函数通常接受两个参数,第一个参数是要添加周数
的日期,通常是一个日期对象或者表示日期的字符串;第二个参数
是要添加的周数,通常是一个整数。
例如,如果我们有一个日期对象表示为date_obj,我们想要在
这个日期上添加3周,我们可以这样使用add_weeks函数,
add_weeks(date_obj, 3)。
这将返回原日期加上3周后的日期。
需要注意的是,有些编程语言的日期处理函数可能会要求日期
对象遵循特定的格式或者使用特定的日期库,因此在使用
add_weeks函数时需要根据具体的编程语言和日期处理库来进行调用。
另外,有些add_weeks函数还可能会处理一些特殊情况,比如
跨年的情况、闰年的情况等,因此在使用时需要注意这些边界情况。
总的来说,add_weeks函数是一个用于在日期上添加指定周数的函数,其基本用法是传入一个日期和要添加的周数,然后返回添加指定周数后的日期。
在实际使用时需要根据具体的编程语言和日期处理库来进行调用,并注意处理边界情况。
MySQL学习笔记:timediff、timestampdiff、datediff⼀、时间差函数:timestampdiff 语法:timestampdiff(interval, datetime1,datetime2) 结果:返回(时间2-时间1)的时间差,结果单位由interval参数给出。
frac_second 毫秒(低版本不⽀持,⽤second,再除于1000)second 秒minute 分钟hour ⼩时day 天week 周month ⽉quarter 季度year 年 注意:MySQL 5.6之后才⽀持毫秒的记录和计算,如果是之前的版本,最好是在数据库除datetime类型之外的字段,再建⽴⽤于存储毫秒的int字段,然后⾃⼰进⾏转换计算。
# 所有格式SELECT TIMESTAMPDIFF(FRAC_SECOND,'2012-10-01','2013-01-13'); # 暂不⽀持SELECT TIMESTAMPDIFF(SECOND,'2012-10-01','2013-01-13'); # 8985600SELECT TIMESTAMPDIFF(MINUTE,'2012-10-01','2013-01-13'); # 149760SELECT TIMESTAMPDIFF(HOUR,'2012-10-01','2013-01-13'); # 2496SELECT TIMESTAMPDIFF(DAY,'2012-10-01','2013-01-13'); # 104SELECT TIMESTAMPDIFF(WEEK,'2012-10-01','2013-01-13'); # 14SELECT TIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13'); # 3SELECT TIMESTAMPDIFF(QUARTER,'2012-10-01','2013-01-13'); # 1SELECT TIMESTAMPDIFF(YEAR,'2012-10-01','2013-01-13'); # 0⼆、时间差函数:datediff 语法:传⼊两个⽇期参数,⽐较DAY天数,第⼀个参数减去第⼆个参数的天数值。
mysql、oracle存储过程语法区别mysql、oracle存储过程语法区别1、条件语句:mysql使用elseif关键字,oracle是elsif关键字;oracle:if表达式 then表达式;elsif表达式;endif;mysql:if表达式then表达式;elseif表达式;endif;2、字符串连接oracle使用 || ;mysql 使用concat函数;3、日期计算(年月日数)mysql:函数TimeStampDiff()是MySQL本身提供的可以计算两个时间间隔的函数,语法为:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),其中unit 单位有如下几种,分别是:SECOND, MINUTE, HOUR, DAY,WEEK, MONTH, QUARTER, or YEAR。
1 当前时间:sysdate()1 字符转日期:str_to_date() 分隔符一致,年月日要一致;示例:select str_to_date('2008-4-2 15:3:28','%Y-%m-%d%H:%i:%s');1 日期转字符:DATE_FORMAT(date,format)1 S ELECT DATE_FORMAT(sysdate(), '%Y-%m-%d %H:%i:%s');1 数字转字符:concat(num,’’)oracle :months_between 求日期间隔月份,除以12即为间隔年份; 天数,只需要日期直接相减;当前时间:sysdate字符转日期:to_date()1 日期转字符:to_char(date,format) to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')1 数字转字符:to_char(num)4、 定义游标oracel :CURSOR curPlanIndex isSELECT a.INDEX_SCORE,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc FROM eval_plan_index aJOIN eval_index_score c onc.index_id=a.index_id and a.plan_id = c.plan_idWHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID order by dn_value;MYSQL:declare curPlanIndex cursor forSELECT a.INDEX_SCORE,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc FROM eval_plan_index aJOIN eval_index_score c onc.index_id=a.index_id anda.plan_id = c.plan_idWHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID order by dn_value;5、 selectinto 赋值oracle 有exception错误处理beginselect value_name into vc_num_unit fromsys_dictwhere dict_code = 'szdw' and value_code =v_num_unit and rownum <=1 ;exceptionwhen no_data_found thenvc_num_unit := '';end;mysql 如果select 没有数据,则不执行into操作,变量值保持为上次结果,需要手工重置。
mysql获取昨天⽇期、今天⽇期、明天⽇期以及前⼀个⼩时和后⼀个⼩时的时间1、当前⽇期select DATE_SUB(curdate(),INTERVAL 0 DAY) ;2、明天⽇期select DATE_SUB(curdate(),INTERVAL -1 DAY) ;3、昨天⽇期select DATE_SUB(curdate(),INTERVAL 1 DAY) ;4、前⼀个⼩时时间select date_sub(now(), interval 1 hour);5、后⼀个⼩时时间select date_sub(now(), interval -1 hour);6、前30分钟时间select date_add(now(),interval -30 minute)7、后30分钟时间select date_add(now(),interval 30 minute)取得当天:SELECT curdate();mysql> SELECT curdate();+------------+| curdate() |+------------+| 2013-07-29 |+------------+取得当前⽇期:mysql> select now();+---------------------+| now() |+---------------------+| 2013-07-29 22:10:40 |+---------------------+取得前⼀天:mysql> select date_sub(curdate(),interval 1 day);+------------------------------------+| date_sub(curdate(),interval 1 day) |+------------------------------------+| 2013-07-28 |+------------------------------------+括号中为当天时间的前⼀天,如果统计前⼏天就将括号中的'1'改成相应的天数。
starrocks week函数StarRocks是一款高性能、分布式的列式存储分析数据库,专门为OLAP场景而设计。
它具有高效的数据存储和访问能力,可以快速地处理海量数据。
在StarRocks中,week函数是非常常用的一种函数,可以用来获取某个日期所在周的起始日期和结束日期。
一、week函数的语法week函数的语法如下:WEEK(date[, mode])其中,date表示要获取周的日期,mode表示周的起始日。
如果不指定mode,则默认为1,表示周的起始日为星期日。
如果mode为0,则表示周的起始日为星期一。
二、week函数的使用方法1.获取当前日期所在周的起始日期和结束日期SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AS start_date,DATE_ADD(CURDATE(), INTERVAL 6-WEEKDAY(CURDATE()) DAY) AS end_date;上述SQL语句中,先使用WEEKDAY函数获取当前日期是星期几,然后用DATE_SUB函数获取当前日期所在周的起始日期,用DATE_ADD 函数获取当前日期所在周的结束日期。
2.获取指定日期所在周的起始日期和结束日期SELECT DATE_SUB('2022-01-15', INTERVALWEEKDAY('2022-01-15') DAY) AS start_date,DATE_ADD('2022-01-15', INTERVAL 6-WEEKDAY('2022-01-15') DAY) AS end_date;上述SQL语句中,指定要获取的日期为'2022-01-15',先使用WEEKDAY函数获取该日期是星期几,然后用DATE_SUB函数获取该日期所在周的起始日期,用DATE_ADD函数获取该日期所在周的结束日期。
MySQL⽇期函数与⽇期转换格式化函数⼤全MySQL⽇期函数与⽇期转换格式化函数⼤全Mysql作为⼀款开元的免费关系型数据库,⽤户基础⾮常庞⼤,本⽂列出了MYSQL常⽤⽇期函数与⽇期转换格式化函数1、DAYOFWEEK(date)1 2SELECT DAYOFWEEK(‘2016-01-16') SELECT DAYOFWEEK(‘2016-01-16 00:00:00')1-> 7 (表⽰返回⽇期date是星期⼏,记住:星期天=1,星期⼀=2, ... 星期六=7) 2、WEEKDAY(date)1 2SELECT WEEKDAY(‘2016-01-16') SELECT WEEKDAY(‘2016-01-16 00:00:00')1-> 5 (表⽰返回date是在⼀周中的序号,西⽅⽇历中通常⼀周的开始是星期天,并且以0开始计数,所以,记住:0=星期⼀,1=星期⼆, ... 5=星期六) 3、DAYOFMONTH(date)1 2SELECT DAYOFMONTH(‘2016-01-16') SELECT DAYOFMONTH(‘2016-01-16 00:00:00')1-> 16 (表⽰返回date是当⽉的第⼏天,1号就返回1,... ,31号就返回31) 4、DAYOFYEAR(date)1 2SELECT DAYOFYEAR(‘2016-03-31') SELECT DAYOFYEAR(‘2016-03-31 00:00:00')1-> 91 (表⽰返回date是当年的第⼏天,01.01返回1,... ,12.31就返回365) 5、MONTH(date)1 2SELECT MONTH(‘2016-01-16') SELECT MONTH(‘2016-01-16 00:00:00')1-> 1 (表⽰返回date是当年的第⼏⽉,1⽉就返回1,... ,12⽉就返回12) 6、DAYNAME(date)1 2SELECT DAYNAME(‘2016-01-16') SELECT DAYNAME(‘2016-01-16 00:00:00')1-> Saturday (表⽰返回date是周⼏的英⽂全称名字) 7、MONTHNAME(date)1 2SELECT MONTHNAME(‘2016-01-16') SELECT MONTHNAME(‘2016-01-16 00:00:00')1-> January (表⽰返回date的是当年第⼏⽉的英⽂名字) 8、QUARTER(date)1 2SELECT QUARTER(‘2016-01-16') SELECT QUARTER(‘2016-01-16 00:00:00')1-> 1 (表⽰返回date的是当年的第⼏个季度,返回1,2,3,4) 9、WEEK(date,index)1 2 3SELECT WEEK(‘2016-01-03') SELECT WEEK(‘2016-01-03', 0) SELECT WEEK(‘2016-01-03', 1)1 2 3-> 1 (该函数返回date在⼀年当中的第⼏周,date(01.03)是周⽇,默认是以为周⽇作为⼀周的第⼀天,函数在此处返回1可以有两种理解:1、第⼀周返回0,第⼆周返回1,.... ,2、以当年的完整周开始计数,第⼀周返回1,第⼆周返回2,... ,最后⼀周返回53)-> 1 (week()默认index就是0. 所以结果同上)-> 0 (当index为1时,表⽰⼀周的第⼀天是周⼀,所以,4号周⼀才是第⼆周的开始⽇)10、YEAR(date)1 2 3SELECT YEAR(‘70-01-16') SELECT YEAR(‘2070-01-16') SELECT YEAR(‘69-01-16 00:00:00')1 2 3-> 1970 (表⽰返回date的4位数年份) -> 2070-> 1969要注意的是:如果年份只有两位数,那么⾃动补全的机制是以默认时间1970.01.01为界限的,>= 70 的补全 19,< 70 的补全 20 11、HOUR(time)1 2SELECT HOUR(‘11:22:33')SELECT HOUR(‘2016-01-16 11:22:33')1 2-> 11 -> 11返回该date或者time的hour值,值范围(0-23)12、MINUTE(time)1SELECT MINUTE(‘11:22:33')1 2SELECT MINUTE(‘11:22:33')SELECT MINUTE(‘2016-01-16 11:44:33')1 2-> 22 -> 44返回该time的minute值,值范围(0-59)13、SECOND(time)1 2SELECT SECOND(‘11:22:33')SELECT SECOND(‘2016-01-16 11:44:22')1 2-> 33 -> 22返回该time的minute值,值范围(0-59)14、PERIOD_ADD(month,add)1 2 3SELECT PERIOD_ADD(1601,2) SELECT PERIOD_ADD(191602,3) SELECT PERIOD_ADD(191602,-3)1 2 3-> 201603 -> 191605 -> 191511该函数返回对month做增减的操作结果,month的格式为yyMM或者yyyyMM,返回的都是yyyyMM格式的结果,add可以传负值15、PERIOD_DIFF(monthStart,monthEnd)1 2 3 4SELECT PERIOD_DIFF(1601,1603) SELECT PERIOD_DIFF(191602,191607) SELECT PERIOD_DIFF(1916-02,1916-07) SELECT PERIOD_DIFF(1602,9002)1 2 3 4-> -2 -> -5 -> 5 -> 312该函数返回monthStart - monthEnd的间隔⽉数16、DATE_ADD(date,INTERVAL number type),同 ADDDATE()1 2 3 4SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL 1 SECOND)SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL 1 DAY)SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL “1:1” MINUTE_SECOND) SELECT DATE_ADD(“2016-01-01 00:00:00”,INTERVAL “-1 10” DAY_HOUR)1 2 3 4-> 2016-01-01 00:00:00 -> 2016-01-01 23:59:59 -> 2016-01-01 00:01:00 -> 2015-12-30 14:00:00DATE_ADD()和ADDDATE()返回对date操作的结果1、date的格式可以是“15-12-31”,可以是“15-12-31 23:59:59”,也可以是“2015-12-31 23:59:59”,如果参数date是date格式,则返回date格式结果,如果参数date是datetime格式,则返回datetime格式结果2、type格式:SECOND 秒 SECONDSMINUTE 分钟 MINUTESHOUR 时间 HOURSDAY 天 DAYSMONTH ⽉ MONTHSYEAR 年 YEARSMINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"HOUR_MINUTE ⼩时和分钟 "HOURS:MINUTES"DAY_HOUR 天和⼩时 "DAYS HOURS"YEAR_MONTH 年和⽉ "YEARS-MONTHS"HOUR_SECOND ⼩时, 分钟, "HOURS:MINUTES:SECONDS"DAY_MINUTE 天, ⼩时, 分钟 "DAYS HOURS:MINUTES"DAY_SECOND 天, ⼩时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"3、另外,如果不⽤函数,也可以考虑⽤操作符“+”,“-”,例⼦如下:1 2 3 4SELECT “2016-01-01” - INTERVAL 1 SECONDSELECT “2016-01-01” - INTERVAL 1 DAYSELECT ‘2016-12-31 23:59:59' + INTERVAL 1 SECONDSELECT ‘2016-12-31 23:59:59' + INTERVAL “1:1” MINUTE_SECOND返回结果:1 2 3 4-> 2015-12-31 23:59:59 -> 2015-12-31-> 2017-01-01 00:00:00 -> 2017-01-01 00:01:0017、DATE_SUB(date,INTERVAL number type),同 SUBDATE()⽤法和DATE_ADD()与ADDDATE()类似,⼀个是加,⼀个是减,⽤时参照16点,具体⽤法请参考DATE_ADD()与ADDDATE()。
MySql查询上周(周⼀到周⽇)每天的⽇期!⼟⽅!⾸先介绍⼀个函数:YEARWEEK(date[,mode])主要说明⼀下后⾯的可选参数mode,这个参数就是指定⼀周⾥⾯哪⼀天是第⼀天。
默认⼀周是从周⽇开始,这显然不太符合我们的要求。
要指定每周从周⼀开始的话,mode=1就好了。
下图为该参数的说明:接下来进⼊正题,直接上SQL吧SELECTdate_format(lastWeek.`timeDay`,'%Y-%m-%d') as'timeDay'FROM (select DATE_SUB(NOW(),interval 13day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 12day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 11day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 10day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 9day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 8day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 7day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 6day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 5day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 4day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 3day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 2day) as'timeDay'UNION ALLselect DATE_SUB(NOW(),interval 1day) as'timeDay') as lastWeekWHERE YEARWEEK(lastWeek.`timeDay`,1) = YEARWEEK(NOW(),1)-1为什么说这是个⼟⽅呢,哈哈!⾸先看上去莫名的⼟,理解⼀下逻辑如下:假如今天是周⼀,我要得出上周⼀和上周⽇的⽇期,很简单:上周⼀距离今天7天=select DATE_SUB(NOW(),interval 7 day);上周⽇距离今天1天=select DATE_SUB(NOW(),interval 1 day);没⽑病,那如果今天是周⽇呢?上周⼀距离今天13天=select DATE_SUB(NOW(),interval 13 day);上周⽇距离今天7天=select DATE_SUB(NOW(),interval 7 day);没错,这⾥就是查询出来上周所有可能的⽇期,因为这个问题的难点就是我们不能指定当前的⽇期。
Mysql中,WEEK函数的参数问题
在mysql里面,要按周统计,周的计算,默认是从每日到周六的,但是我想得到的是每周一到周六的,所以,就做了下研究。
如下:
SELECT
WEEK ( date )
SUM ( sale )
FROM
表
GROUP BY
WEEK( date );
发现默认情况下,这个WEEK ( 日期) 是每把周日,作为一周的开始。
WeeK函数有如下参数,具体描述如下:
参数值
每周第一天
是星期几
返回值
范围
第一周是怎么计算的?
星期天
0-53
遇到本年的第一个星期天开始,是第一周。
前面的计算为第0周。
1
星期一
0-53
假如第一周能超过3天,那么计算为本年的第一周。
否则为第0周
可以理解为
如果1月1号~4号是星期一,那么本年第一周开始。
(之前的是第零周)
如果1月5号以后是星期一,那么现在开始,是本年的第二周了,之前的是第一周。
2
星期天
1-53
遇到本年的第一个星期天开始,是第一周。
前面的计算为上年度的第5x周。
3
星期一
1-53
假如第一周能超过3天,那么计算为本年的第一周。
否则为上年度的第5x周。
可以理解为
如果1月1号~4号是星期一,那么本年第一周开始。
(之前的是第5x周)
如果1月5号以后是星期一,那么现在开始,是本年的第二周了,之前的是第一周。
4
星期天
0-53
假如第一周能超过3天,那么计算为本年的第一周。
否则为第0周
可以理解为
如果1月1号~4号是星期天,那么本年第一周开始。
(之前的是第零周)
如果1月5号以后是星期天,那么现在开始,是本年的第二周了,之前的是第一周。
5
星期一
0-53
遇到本年的第一个星期一开始,是第一周。
前面的计算为第0周。
6
星期天
1-53
假如第一周能超过3天,那么计算为本年的第一周。
否则为上年度的第5x周。
可以理解为
如果1月1号~4号是星期天,那么本年第一周开始。
(之前的是第5x周)
如果1月5号以后是星期天,那么现在开始,是本年的第二周了,之前的是第一周。
7
星期一
1-53
遇到本年的第一个星期一开始,是第一周。
前面的计算为上年度的第5x周。
下面是测试表与测试数据
CREATE TABLE test_YEARWEEK ( test date
);
INSERT INTO test_YEARWEEK SELECT '2009-01-01' UNION ALL SELECT '2009-01-02' UNION ALL SELECT '2009-01-03' UNION ALL SELECT '2009-01-04' UNION ALL SELECT '2009-01-05' UNION ALL SELECT '2009-01-06' UNION ALL SELECT '2009-01-07' UNION ALL SELECT '2009-12-25' UNION ALL SELECT '2009-12-26' UNION ALL SELECT '2009-12-27' UNION ALL SELECT '2009-12-28' UNION ALL SELECT '2009-12-29' UNION ALL SELECT '2009-12-30' UNION ALL SELECT '2009-12-31' UNION ALL SELECT '2010-01-01' UNION ALL SELECT '2010-01-02' UNION ALL SELECT '2010-01-03' UNION ALL SELECT '2010-01-04' UNION ALL SELECT '2010-01-05' UNION ALL SELECT '2010-01-06' UNION ALL SELECT '2010-01-07';
下面是查询语句与结果。
select
test,
DATE_FORMAT(test, '%W') AS W, WEEK( test, 0) AS `0`,
WEEK( test, 1) AS `1`,
WEEK( test, 2) AS `2`,
WEEK( test, 3) AS `3`,
WEEK( test, 4) AS `4`,
WEEK( test, 5) AS `5`,
WEEK( test, 6) AS `6`,
WEEK( test, 7) AS `7`
FROM
test_YEARWEEK;
+------------+-----------+------+------+------+------+------+------+------+------+ | test | W | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+------------+-----------+------+------+------+------+------+------+------+------+ | 2009-01-01 | Thursday | 0 | 1 | 52 | 1 | 0 | 0 | 53 | 52 | | 2009-01-02 | Friday | 0 | 1 | 52 | 1 | 0 | 0 | 53 | 52 | | 2009-01-03 | Saturday | 0 | 1 | 52 | 1 | 0 | 0 | 53 | 52 | | 2009-01-04 | Sunday | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 52 | | 2009-01-05 | Monday | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | | 2009-01-06 | Tuesday | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | | 2009-01-07 | Wednesday | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | | 2009-12-25 | Friday | 51 | 52 | 51 | 52 | 51 | 51 | 51 | 51 | | 2009-12-26 | Saturday | 51 | 52 | 51 | 52 | 51 | 51 | 51 | 51 | | 2009-12-27 | Sunday | 52 | 52 | 52 | 52 | 52 | 51 | 52 | 51 | | 2009-12-28 | Monday | 52 | 53 | 52 | 53 | 52 | 52 | 52 | 52 |
| 2009-12-29 | Tuesday | 52 | 53 | 52 | 53 | 52 | 52 | 52 | 52 | | 2009-12-30 | Wednesday | 52 | 53 | 52 | 53 | 52 | 52 | 52 | 52 |
| 2009-12-31 | Thursday | 52 | 53 | 52 | 53 | 52 | 52 | 52 | 52 |
| 2010-01-01 | Friday | 0 | 0 | 52 | 53 | 0 | 0 | 52 | 52 | | 2010-01-02 | Saturday | 0 | 0 | 52 | 53 | 0 | 0 | 52 | 52 | | 2010-01-03 | Sunday | 1 | 0 | 1 | 53 | 1 | 0 | 1 | 52 | | 2010-01-04 | Monday | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | 2010-01-05 | Tuesday | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | 2010-01-06 | Wednesday | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | 2010-01-07 | Thursday | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +------------+-----------+------+------+------+------+------+------+------+------。