SQL里怎么把日期截取为月份
1、首先我们需要找到一个带日期字段的数据表。
2、接下来向表中插入日期值。
3、然后我们通过month函数获取月份即可,注意month里添加的是列名。
4、运行SQL语句以后我们发现日期中的月份已经被提取出来了。
5、另外我们还可以在Month中直接加GETDATE函数获取当前时间的月份。
6、最后还可以运用MONTH和DATEADD搭配使用来获取日期的前一个月或者后一个月。
MYSQL中获取当前的年和月
selectyear(curdate()),month(curdate()),day(curdate());
selectweekofyear(curdate());
有点细微的差别,weekofyear(date)相当于week(date,3).
下面是week(date,Mode),取值的说明,根据自己的实际情况取自己想要的值
Mode工作日范围Week1为第一周…
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本年度中有一个周一
selectdate_format(now(),’%Y’)
selectdate_format(now(),’%m’)
selectdate_format(now(),’%e’)
selectdate_format(now(),’%U’)
selectyear(curdate()),month(curdate()),dayofyear(curdate()),weekofyear(curdate());
◆TIME(expr)
提取一个时间或日期时间表达式的时间部分,并将其以字符串形式返回。
mysql>SELECTTIME(‘2003-12-3101:02:03’);
->’01:02:03′
mysql>SELECTTIME(‘2003-12-3101:02:03.000123’);
->’01:02:03.000123′
◆TIMEDIFF(expr,expr2)
TIMEDIFF()返回起始时间expr和结束时间expr2之间的时间。expr和expr2为时间或date-and-time表达式,两个的类型必须一样。
mysql>SELECTTIMEDIFF(‘2000:01:0100:00:00’,
->’2000:01:0100:00:00.000001′);
->’-00:00:00.000001′
mysql>SELECTTIMEDIFF(‘1997-12-3123:59:59.000001’,
->’1997-12-3001:01:01.000002′);
->’46:58:57.999999′
◆TIMESTAMP(expr),TIMESTAMP(expr,expr2)
对于一个单参数,该函数将日期或日期时间表达式expr作为日期时间值返回.对于两个参数,它将时间表达式expr2添加到日期或日期时间表达式expr中,将theresult作为日期时间值返回。
mysql>SELECTTIMESTAMP(‘2003-12-31’);
->’2003-12-3100:00:00′
mysql>SELECTTIMESTAMP(‘2003-12-3112:00:00′,’12:00:00’);
->’2004-01-0100:00:00′
◆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>SELECTTIMESTAMPADD(MINUTE,1,’2003-01-02′);
->’2003-01-0200:01:00′
mysql>SELECTTIMESTAMPADD(WEEK,1,’2003-01-02′);
->’2003-01-09′
◆TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
返回日期或日期时间表达式datetime_expr1和datetime_expr2the之间的整数差。其结果的单位由interval参数给出。interval的法定值同TIMESTAMPADD()函数说明中所列出的相同。
mysql>SELECTTIMESTAMPDIFF(MONTH,’2003-02-01′,’2003-05-01′);
mysql>SELECTTIMESTAMPDIFF(YEAR,’2002-05-01′,’2001-01-01′);
◆TIME_FORMAT(time,format)
其使用和DATE_FORMAT()函数相同,然而format字符串可能仅会包含处理小时、分钟和秒的格式说明符。其它说明符产生一个NULL值或0。
若timevalue包含一个大于23的小时部分,则%H和%k小时格式说明符会产生一个大于0..23的通常范围的值。另一个小时格式说明符产生小时值模数12。
mysql>SELECTTIME_FORMAT(‘100:00:00′,’%H%k%h%I%l’);
->’10010004044′
◆TIME_TO_SEC(time)
返回已转化为秒的time参数。
mysql>SELECTTIME_TO_SEC(’22:23:00′);
->80580
mysql>SELECTTIME_TO_SEC(’00:39:38′);
->2378
◆TO_DAYS(date)
给定一个日期date,返回一个天数(从年份0开始的天数)。
mysql>SELECTTO_DAYS(950501);
->728779
mysql>SELECTTO_DAYS(‘1997-10-07’);
->729669
TO_DAYS()不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。
请记住,MySQL使用“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如,’1997-10-07’和’97-10-07’被视为同样的日期:
mysql>SELECTTO_DAYS(‘1997-10-07′),TO_DAYS(’97-10-07’);
->729669,729669
对于1582年之前的日期(或许在其它地区为下一年),该函数的结果实不可靠的。
◆UNIX_TIMESTAMP(),UNIX_TIMESTAMP(date)
若无参数调用,则返回一个Unixtimestamp(‘1970-01-0100:00:00’GMT之后的秒数)作为无符号整数。若用date来调用UNIX_TIMESTAMP(),它会将参数值以’1970-01-0100:00:00’GMT后的秒数的形式返回。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或一个当地时间的YYMMDD或YYYMMDD格式的数字。
mysql>SELECTUNIX_TIMESTAMP();
->882226357
mysql>SELECTUNIX_TIMESTAMP(‘1997-10-0422:23:00’);
->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>SELECTUTC_DATE(),UTC_DATE()+0;
->’2003-08-14′,20030814
◆UTC_TIME,UTC_TIME()
返回当前UTC值,其格式为’HH:MM:SS’或HHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。
mysql>SELECTUTC_TIME(),UTC_TIME()+0;
->’18:07:53′,180753
◆UTC_TIMESTAMP,UTC_TIMESTAMP()
返回当前UTC日期及时间值,格式为’YYYY-MM-DDHH:MM:SS’或YYYYMMDDHHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。
mysql>SELECTUTC_TIMESTAMP(),UTC_TIMESTAMP()+0;
->’2003-08-1418:08:04′,20030814180804
◆WEEK(date[,mode])
该函数返回date对应的星期数。WEEK()的双参数形式允许你指定该星期是否起始于周日或周一,以及返回值的范围是否为从0到53或从1到53。若mode参数被省略,则使用default_week_format系统自变量的值。请参见5.3.3节,“服务器系统变量”。
以下表说明了mode参数的工作过程:
mysql>SELECTWEEK(‘1998-02-20’);
mysql>SELECTWEEK(‘1998-02-20’,0);
mysql>SELECTWEEK(‘1998-02-20’,1);
mysql>SELECTWEEK(‘1998-12-31’,1);
注意,假如有一个日期位于前一年的最后一周,若你不使用2、3、6或7作为mode参数选择,则MySQL返回0:
mysql>SELECTYEAR(‘2000-01-01’),WEEK(‘2000-01-01’,0);
->2000,0
有人或许会提出意见,认为MySQL对于WEEK()函数应该返回52,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回“给定年份的星期数”。这使得WEEK()函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。
假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用0、2、5或7作为mode参数选择。
mysql>SELECTWEEK(‘2000-01-01’,2);
作为选择,可使用YEARWEEK()函数:
mysql>SELECTYEARWEEK(‘2000-01-01’);
->199952
mysql>SELECTMID(YEARWEEK(‘2000-01-01’),5,2);
->’52’
◆WEEKDAY(date)
返回date(0=周一,1=周二,…6=周日)对应的工作日索引weekdayindexfor
mysql>SELECTWEEKDAY(‘1998-02-0322:23:00’);
mysql>SELECTWEEKDAY(‘1997-11-05’);
◆WEEKOFYEAR(date)
将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。
mysql>SELECTWEEKOFYEAR(‘1998-02-20’);
◆YEAR(date)
返回date对应的年份,范围是从1000到9999。
mysql>SELECTYEAR(’98-02-03′);
->1998
◆YEARWEEK(date),YEARWEEK(date,start)
返回一个日期对应的年或周。start参数的工作同start参数对WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。
mysql>SELECTYEARWEEK(‘1987-01-01’);
->198653
注意,周数和WEEK()函数队可选参数0或1可能会返回的(0)w有所不同,原因是此时WEEK()返回给定年份的语境中的周。
电脑网络分类达人刘杰
mysql分别获取已有数据date中的年月日
分别用YEAR,MONTH,DAY函数,例如
mysql> select * from test;
+————+
| DATE |
+————+
| 2011-01-19 |
| 2011-01-19 |
| 2010-06-01 |
| 2010-06-10 |
| 2010-07-10 |
+————+
mysql> select YEAR(DATE) from test;
+————+
| YEAR(DATE) |
+————+
| 2011 |
| 2011 |
| 2010 |
| 2010 |
| 2010 |
+————+
mysql> select month(DATE) from test ;
+————-+
| month(DATE) |
+————-+
| 1 |
| 1 |
| 6 |
| 6 |
| 7 |
+————-+
mysql> select day(DATE) from test;
+———–+
| day(DATE) |
+———–+
| 19 |
| 19 |
| 1 |
| 10 |
| 10 |
+———–+
MYSQL中获取当前的年和月
select year(now()),month(now())