【问题标题】:MySQL: How to select records for this week?MySQL:如何选择本周的记录?
【发布时间】:2013-11-21 12:11:48
【问题描述】:

我有表temp,结构在sqlfiddle

id(int 11 primary key)
name(varchar 100)
name2(varchar 100)
date(datetime)

我想获得本周的记录,例如,如果现在 21.11.2013 我想要 18.11.2013 到 24.11.2013(一周)的所有行

现在我看到了下一个算法:

  1. 获取工作日
  2. 计算多少天前是星期一
  3. 计算星期一的日期
  4. 计算未来日期星期日
  5. 在日期提出请求

请告诉我,是否存在更短的算法(最好在查询 MySQL 中)?

添加问题是:为什么this query选择日期17.11.2013(Sunday) - 23.11.2013(Saturday)的记录以及如何获取日期18.11.2013(Monday) - 24.11.2013(Sunday)的记录?

查询:

select * from temp
where yearweek(`date`) = yearweek(curdate())

谢谢!

【问题讨论】:

  • 你试过了吗???
  • @Mayank 你没看到?我写算法查找。还是用算法写coe?
  • @YourCommonSense 请告诉我你为什么删除标签 mysqli?
  • 请告诉我你的问题与mysqli有什么关系?
  • @YourCommonSense 我认为 mysql 和 mysqli 的问题

标签: mysql date


【解决方案1】:

使用YEARWEEK():

SELECT *
FROM   your_table
WHERE  YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1)

【讨论】:

  • 什么是最好的? WEEKOFYEAR 还是 yearweek ?
  • 使用yearweek(),您可以指定一个额外的参数,从一周的哪一天开始。
  • 请告诉我为什么它查询日期 17.11.2013(星期日) - 23.11.2013(星期六) 的选择记录以及如何获取日期 18.11.2013(星期一) - 24.11.2013(星期日) 的记录?
  • 使用特定模式,例如1。见here
【解决方案2】:

使用这种方式选择日、周和月的记录:

function my_func($time, $your_date) {
if ($time == 'today') {
    $timeSQL = ' Date($your_date)= CURDATE()';
}
if ($time == 'week') {
    $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())';
}
if ($time == 'month') {
    $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())';
}

$Sql = "SELECT * FROM  your_table WHERE ".$timeSQL
return $Result = $this->db->query($Sql)->result_array();
}

【讨论】:

    【解决方案3】:

    使用YEARWEEK。如果您使用WEEKOFYEAR,您还将获得往年的记录。

    SELECT id, name, date
    FROM table
    WHERE YEARWEEK(date)=YEARWEEK(NOW());
    

    【讨论】:

    • 什么是最好的? WEEKOFYEAR 还是 yearweek ?
    • 使用 YEARWEEK.. 如果您使用 WEEKOFYEAR,您还将获得前几年的记录.. 编辑我的答案
    【解决方案4】:

    你可以按照下面的方法来做

    SELECT DATE_FORMAT("2017-06-15", "%U");
    

    获取周数(从 00 到 53 ) 哪里(星期天的第一天和星期一的最后一天)

    可能对你有用。

    示例:

    SELECT DISTINCT DATE_FORMAT('dates', '%U') AS weekdays FROM table_name;
    

    【讨论】:

      【解决方案5】:

      简短的解决方案是这样的:

      SELECT * FROM my_table WHERE DATE_FORMAT("2021-08-19 15:40:33", "%U") = WEEK(CURDATE());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-14
        • 2019-10-01
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2015-01-28
        相关资源
        最近更新 更多