假如有个表commodity有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:
select * from product where add_time = '2013-01-12';
这种语句,如果你存储的格式是YY-mm-dd这样,那么OK,
如果你存储的格式是:2018-01-12 23:23:56 这种就悲剧了,此时你可以用 DATE() 函数用来返回日期的部分;sql如下处理:
select * from product where Date(add_time) = '2018-01-12'
- 如果你要查询2017年1月份加入的产品呢?
select * from product where date(add_time) between '2013-01-01' and '2013-01-31'
或者: 还可以这样写:
select * from product where Year(add_time) = 2013 and Month(add_time) = 1
- 其date_col的值是在最后30天以内:
SELECT * FROM commodity WHERE TO_DAYS( NOW() ) - TO_DAYS( date_col ) <= 30;
- DAYOFWEEK(date) : 返回日期date的星期索引(1=星期天, 7=星期六) 这些索引值对应于ODBC标准。
select DAYOFWEEK('1998-02-03'); -> 3
- WEEKDAY(date) : 返回date的星期索引 (0=星期一, 6= 星期天)
select WEEKDAY('1997-10-04 22:23:00'); -> 5
select WEEKDAY('2018-07-07'); -> 5
- DAYOFMONTH(date) : 返回date的月份中日期,在1到31范围内。
select DAYOFMONTH('1998-02-03'); -> 3
- DAYOFYEAR(date) : 返回date在一年中的日数, 在1到366范围内。
select DAYOFYEAR('1998-02-03'); -> 34
- MONTH(date) : 返回date的月份,范围1到12。
select MONTH('1998-02-03'); -> 2
- DAYNAME(date) : 返回date的星期名字。
select DAYNAME("1998-02-05"); -> 'Thursday'
select DAYNAME("20180707"); -> 'Saturday'
- MONTHNAME(date) : 返回date的月份名字。
select MONTHNAME("1998-02-05"); -> 'February'
- QUARTER(date) : 返回date一年中的季度,范围1到4。
select QUARTER('98-04-01'); -> 2
select QUARTER('20180707'); -> 3
这是做统计数据时候用了的sql.
查询今天、昨天、一周内、8周、12周等数据 直接在sql写时间查询。 避免时区转化。数据库我们使用的UTC时间。
-
Today
SELECT str_to_date(curdate(),'%Y-%m-%d %H:%i:%s') as todayBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
昨天
``sql
SELECT str_to_date(date_sub(curdate(), interval 1 day),’%Y-%m-%d %H:%i:%s’) as yestodayBegin;
SELECT date_add(date_add(str_to_date(date_sub(curdate(), interval 1 day),’%Y-%m-%d %H:%i:%s’),interval 1 DAY),INTERVAL -1 SECOND) as yestodayEnd; -
最近7天 Last Seven days
SELECT str_to_date(date_sub(curdate(), interval 6 day),'%Y-%m-%d %H:%i:%s') as lastSevenDaysBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
最近14天 Last Fourteen days
SELECT str_to_date(date_sub(curdate(), interval 13 day),'%Y-%m-%d %H:%i:%s') as lastFourteenDaysBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
最近30天 Last Thirty days
SELECT str_to_date(date_sub(curdate(), interval 29 day),'%Y-%m-%d %H:%i:%s') as lastThirtyDaysBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
最近8周 Last eight weeks
SELECT str_to_date(date_sub(curdate(), interval 8 week),'%Y-%m-%d %H:%i:%s') as lastEightWeeksBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
12 最近12周 Last twelve weeks
SELECT str_to_date(date_sub(curdate(), interval 12 week),'%Y-%m-%d %H:%i:%s') as lastTwelveWeeksBegin; SELECT date_add(date_add(str_to_date(curdate(),'%Y-%m-%d %H:%i:%s'),interval 1 DAY),INTERVAL -1 SECOND) as todayEnd; -
最近3月 Last three month
``sql
SELECT str_to_date(date_sub(curdate(), interval 3 month),’%Y-%m-%d %H:%i:%s’) as lastThreeMonthBegin; -
未来3天 Three day later
SELECT str_to_date(date_sub(curdate(), interval -3 day),'%Y-%m-%d %H:%i:%s') as threeDaysLaterEnd; -
未来3月 Three months later
SELECT str_to_date(date_sub(curdate(), interval -3 month),'%Y-%m-%d %H:%i:%s') as threeMonthsLaterEnd; -
取一天的开始时间
SELECT str_to_date(DATE_FORMAT('2018-03-03','%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'); -
取第二天的开始时间
select DATE_ADD(str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY); select DATE_ADD(str_to_date(DATE_FORMAT('2018-03-03','%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY); -
取一天的结束时间
select DATE_ADD(DATE_ADD(str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY),INTERVAL -1 SECOND); select DATE_ADD(DATE_ADD(str_to_date(DATE_FORMAT('2018-03-03','%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY),INTERVAL -1 SECOND);
本文详细介绍如何使用SQL进行日期和时间的高效操作,包括查询特定日期范围内的数据、获取日期组件如年、月、日,以及计算相对日期如今天、昨天和特定时间段的开始与结束时间。适用于数据库管理和数据统计。
8155

被折叠的 条评论
为什么被折叠?



