`
qtqsjxyx
  • 浏览: 16489 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

mysql 检索 符合中国国情的 本星期(周一至周七)的数据

阅读更多
今天写了一个坑爹的需求,我要检索出本星期的数据……。

本来是很简单,只要

SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now());

就可以了。

但是!!!坑爹的中国的星期跟外国不一样。外国是周日是本日期的第一天,周六是最后一天,但在中国周一是第一天,周日是最后一天。
也就是说你用上述SQL语句查到的本周数据实际上是本周至周六加上个周日的数据。

我把百度翻个遍竟找到的都是同一句查本周数据的SQL,深感坑爹。但是经过我的多种尝试,发现在不用mysql编程并且不改动mysql配置的基础下至少用两句SQL,因为坑爹的周日,
具体实现是这样的,我是在JAVA下实现的,先看句子,下附解释.

if(Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == 1)
{        //判断是否为周日,是的话发这句SQL,不是的话发另一句
pstm = connection.prepareStatement(“SELECT * FROM sign WHERE ((YEARWEEK(date_format(signTime,’%Y-%m-%d’)) = YEARWEEK(now()) and s_week=7) or (YEARWEEK(date_format(signTime,’%Y-%m-%d’)) = YEARWEEK(now())-1 and s_week!=7))”) ;
}
else {
pstm = connection.prepareStatement(“SELECT * FROM sign WHERE YEARWEEK(date_format(signTime,’%Y-%m-%d’)) = YEARWEEK(now()) and s_week!=7″) ;
}
resultSet = pstm.executeQuery();

解释一下:
先判断今天是不是周天,如果是周天的话,刚查询上个星期的数据不包括周天….因为外国的周天算是下个星期开始,中国是本星期结束,所以到周天实际已经进入下个星期了
SQL语句是:SELECT * FROM sign(表名) WHERE ((YEARWEEK(date_format(signTime(时间字段名),’%Y-%m-%d’)) = YEARWEEK(now()) and s_week(记录今天周几的字段,也可直接用函数获得)=7) or (YEARWEEK(date_format(signTime,’%Y-%m-%d’)) = YEARWEEK(now())-1 and s_week!=7))
然后如果不是周天,那么就查询这个星期的数据不包括周天.
SQL语句是:SELECT * FROM sign WHERE YEARWEEK(date_format(signTime,’%Y-%m-%d’)) = YEARWEEK(now()) and s_week!=7

哈哈。半夜之作,还望对大家有所帮……。

JAVA WEB路上的新手,希望能与大家成为朋友,共同交流技术。
本人小站:www.isnail.me
邮箱:isnail@isnail.me
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics