MySQL:如何选择本周的记录?

时间:2013-11-21 12:11:49

标签: mysql date

我在sqlfiddle上有结构temp

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

我想在本周获得记录,例如现在21.11.2013我希望所有行于2013年11月18日至2013年11月24日(周)

现在我看到下一个算法:

  1. 获取工作日
  2. 计算星期一的天数
  3. 计算星期一
  4. 计算星期日的未来日期
  5. 在日期提出请求
  6. 请告诉我,是否存在较短的算法(最好是在查询MySQL中)?

    ADD问题是:为什么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())
    

    谢谢!

4 个答案:

答案 0 :(得分:61)

使用YEARWEEK()

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

答案 1 :(得分:9)

使用YEARWEEK。如果您使用WEEKOFYEAR,您也会获得前几年的记录。

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

答案 2 :(得分:1)

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

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 :(得分:0)

您可以通过以下方法

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

获取周数(从00到53) 哪里(周日第1天和周一最后一天)

对您有用。

示例:

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