2016-05-31 16 views
6

Я строю еженедельный отчет с использованием MySQL запросов. Сначала я получаю номер неделиMySQL: выберите дату текущего дня недели

SELECT WEEK(CURDATE()); 

Затем мне нужно указать начальную дату недели (понедельник для моего региона). Как это сделать с MySQL?

Спасибо!

+1

['SELECT WEEK (CURDATE(), 1);'] (http://stackoverflow.com/a/16196958/2451726) – Arulkumar

+0

Он также работает со вторым параметром –

ответ

10

Если вам нужна дата в понедельник текущей недели попробовать это:

SELECT DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY) 

Он вернет вам дату понедельник текущей недели.

+0

Он работает. Используя эту функцию, мы также можем получить понедельник за предыдущую неделю следующим образом: 'SELECT DATE_ADD (DATE_ADD (CURDATE(), INTERVAL - WEEKDAY (CURDATE()) DAY), INTERVAL - 1 WEEK)'. Может ли последняя быть более компактной? –

1
SELECT DATE_ADD((SELECT curdate() - INTERVAL (WEEKDAY(curdate())+1)DAY),INTERVAL 1 DAY) as current_monday 
0

Вы можете использовать это:

<?php 
    $week = date('W'); 
    $year = date('Y'); 
    echo $date1 = date(
     'Y-m-d', 
     strtotime($year . 'W' . str_pad($week, 2, '0', STR_PAD_LEFT)) 
    ); 
    ?> 
1

В самом деле, DATE_ADD не является необходимым и усложняет логику. Вот простейший вариант для «Дата первого дня текущей недели»:

select date(curdate() - interval weekday(curdate()) day) 

которые переводят бы: получить дату() часть (текущая дата - интервал N дней) где N = сегодняшнее число в неделю, то есть чт это номер 3 (в течение недели, начиная с понедельника)

Затем, получить понедельник предыдущей недели, является:

select date(curdate() - interval weekday(curdate()) day - interval 1 week) 

, который является более читаемым ИМХО.

Смежные вопросы