web-dev-qa-db-fra.com

MySQL: Comment sélectionner les enregistrements pour cette semaine?

J'ai la table temp avec la structure sur sqlfiddle :

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

Je voudrais obtenir l'enregistrement sur cette semaine, par exemple si maintenant 21.11.2013 je voudrais toutes les lignes du 18.11.2013 au 24.11.2013 (sur la semaine)

Maintenant, je vois l'algorithme suivant:

  1. obtenir le jour de la semaine
  2. calculer combien de jours était lundi
  3. calculer la date lundi
  4. calculer la date future dimanche
  5. faire une demande le jour

Dites-moi s'il vous plaît, existe un algorithme plus court (de préférence dans la requête MySQL)?

ADD La question est la suivante: Pourquoi cette requête sélectionner l'enregistrement sur la date 17.11.2013(Sunday) - 23.11.2013(Saturday) et comment obtenir les enregistrements sur la date 18.11.2013(Monday) - 24.11.2013(Sunday)?

question: 

select * from temp
where yearweek(`date`) = yearweek(curdate())

Merci!

29
user2881809

Utilisez YEARWEEK() :

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

Utilisez YEARWEEK. Si vous utilisez WEEKOFYEAR, vous obtiendrez également des enregistrements des années précédentes.

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

Pour sélectionner les enregistrements du jour, de la semaine et du mois, utilisez cette méthode:

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();
}
1
ganji

Vous pouvez le faire en suivant la méthode

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

Obtenir le numéro de semaine (de 00 à 53) Où (dimanche 1er jour et lundi dernier jour de la semaine)

Peut être utile pour vous.

exemple:

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