MySQL按周比较

时间:2014-05-20 12:39:11

标签: mysql select

我有一个select语句,需要将其WHERE基于时间戳,但是对于从星期一开始的那一周内的所有日期。

MySQL

SELECT DISTINCT(unique_reference) AS unique_reference,  date(datetime) AS datetime
    FROM sales_tickets

    WHERE Date(datetime)='$datetime'

这是基于$datetime可以是任何日期的事实,但是select语句需要获取该周的所有记录,例如:如果它是2014年5月12日星期一,它将从该周获取所有结果而不是一天。

目前,它只取得一天的结果。

我不知道如何纠正这个问题。任何建议都会很棒。谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用WEEK功能进行比较:

WHERE WEEK(DATE(datetime)) = WEEK('$datetime')

如果您有多个年份的条目,则可以使用YEARWEEK function

编辑一周的第一天: WEEKYEARWEEK函数都有第二个可选参数,用于指示何时开始一周。尝试考虑模式1或5。

Mode    First day of week   Range   Week 1 is the first week …
0   Sunday  0-53    with a Sunday in this year
1   Monday  0-53    with 4 or more days this year
2   Sunday  1-53    with a Sunday in this year
3   Monday  1-53    with 4 or more days this year
4   Sunday  0-53    with 4 or more days this year
5   Monday  0-53    with a Monday in this year
6   Sunday  1-53    with 4 or more days this year
7   Monday  1-53    with a Monday in this year

答案 1 :(得分:2)

一个可攻击的解决方案将明确计算所需范围的起点和终点:

WHERE datetime >= DATE('$datetime') + INTERVAL 0 - WEEKDAY('$datetime') DAY
  AND datetime <  DATE('$datetime') + INTERVAL 7 - WEEKDAY('$datetime') DAY

答案 2 :(得分:1)

最简单的方法可能是让您的WHERE语句检查一系列值,您可以事先计算这些值。 我假设您正在使用php。

所以你的SQL语句将是:

SELECT DISTINCT(unique_reference) AS unique_reference,  date(datetime) AS datetime
FROM sales_tickets

WHERE (Date(datetime) > '$startDate')
   AND (Date(datetime) < '$endDate');

您首先要弄清楚$ startDate和$ endDate是什么:

$endDate = strtotime('Monday', time()); // might need to adjust this depending on when your week starts 
$startDate = $endDate - 7*24*60*60; //one week before.

小心转换unix时间戳和SQL中使用的日期时间之间的时间,但是你明白了。

答案 3 :(得分:0)

尝试WEEK():

WHERE WEEK(datetime)=WEEK('$datetime')

了解详情:WEEK()