Ответ 1
Используйте YEARWEEK()
:
SELECT *
FROM your_table
WHERE YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1)
Добрый день.
У меня есть таблица 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) obtain weekday
2) calculate how many days ago was Monday
3) calculate the date Monday
4) calculate future date Sunday
5) make a request on date
Скажите, пожалуйста, существует более короткий алгоритм (желательно в запросе MySQL)?
ADD Вопрос: почему запрос выберите запись на дату 17.11.2013 ( Воскресенье) - 23.11.2013 (суббота) и как получать записи на дату 18.11.2013 (понедельник) - 24.11.2013 (воскресенье)?
запрос:
select * from temp
where yearweek(`date`) = yearweek(curdate())
Спасибо!
Используйте YEARWEEK()
:
SELECT *
FROM your_table
WHERE YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1)
SELECT id, name, date
FROM table
WHERE YEARWEEK(date)=YEARWEEK(NOW());
Для выбора записей дня, недели и месяца используйте этот способ:
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();
}
Вы можете сделать это, следуя методу
SELECT DATE_FORMAT("2017-06-15", "%U");
Получить количество недель (от 00 до 53) Где (воскресенье 1-й день и понедельник последний день недели)
Может быть полезно для вас.
Пример:
SELECT DISTINCT DATE_FORMAT('dates', '%U') AS weekdays FROM table_name;