我有一个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日星期一,它将从该周获取所有结果而不是一天。
目前,它只取得一天的结果。
我不知道如何纠正这个问题。任何建议都会很棒。谢谢。
答案 0 :(得分:2)
您可以使用WEEK
功能进行比较:
WHERE WEEK(DATE(datetime)) = WEEK('$datetime')
如果您有多个年份的条目,则可以使用YEARWEEK
function。
编辑一周的第一天:
WEEK
和YEARWEEK
函数都有第二个可选参数,用于指示何时开始一周。尝试考虑模式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)