Sélectionnez les données de la plage de dates entre deux dates

J’ai une table nommée Product_Sales et elle contient des données comme celle-ci

 Product_ID | Sold_by | Qty | From_date | To_date -----------+---------+-----+------------+----------- 3 | 12 | 7 | 2013-01-05 | 2013-01-07 6 | 22 | 14 | 2013-01-06 | 2013-01-10 8 | 11 | 9 | 2013-02-05 | 2013-02-11 

Maintenant, quelle est la requête si je souhaite sélectionner des données de vente entre deux dates d’une plage de dates?

Par exemple, je veux sélectionner les données de ventes du 2013-01-03 au 2013-01-09 .

description de l'intersection des intervalles

Comme vous pouvez le voir, il y a deux façons de faire les choses:

  • enrôler toutes les options acceptables
  • exclure toutes les mauvaises options

Evidemment, la seconde voie est beaucoup plus simple (seulement deux cas contre quatre).

Votre SQL ressemblera à:

 SELECT * FROM Product_sales WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom) 
 SELECT * from Product_sales where (From_date BETWEEN '2013-01-03'AND '2013-01-09') OR (To_date BETWEEN '2013-01-03' AND '2013-01-09') OR (From_date < = '2013-01-03' AND To_date >= '2013-01-09') 

Vous devez couvrir toutes les possibilités. From_Date ou To_Date peuvent se situer entre votre plage de dates ou les dates d’enregistrement peuvent couvrir toute la plage.

Si l’une des From_date ou To_date situe entre les dates ou si From_date est inférieur à la date de début et que To_date est supérieur à la date de fin; alors cette ligne devrait être retournée.

Essayez de suivre la requête pour obtenir des dates entre la plage:

 SELECT * FROM Product_sales WHERE From_date >= '2013-01-03' AND To_date < = '2013-01-09' 
 SELECT * FROM Product_sales WHERE From_date between '2013-01-03' AND '2013-01-09' 

S’il vous plaît essayez:

 DECLARE @FrmDt DATETIME, @ToDt DATETIME SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09' SELECT * FROM Product_sales WHERE (@FrmDt BETWEEN From_date AND To_date) OR (@ToDt BETWEEN From_date AND To_date) 
 SELECT * FROM Product_sales WHERE ( From_date >= '2013-08-19' AND To_date < = '2013-08-23' ) OR ( To_date >= '2013-08-19' AND From_date < = '2013-08-23' ) 
 select * from table where ( (table.EndDate > '2013-01-05') and (table.StartDate < '2013-01-07' ) ) 

Cette requête vous aidera à:

 select * from XXXX where datepart(YYYY,create_date)>=2013 and DATEPART(YYYY,create_date)< =2014 

Juste mes 2 cents, je trouve que le format “dd-MMM-aaaa” est le plus sûr car le serveur de firebase database saura ce que vous voulez, quels que soient les parameters régionaux du serveur. Sinon, vous pourriez rencontrer des problèmes sur un serveur dont les parameters régionaux de date sont aaaa-jj-mm (pour quelque raison que ce soit)

Ainsi:

 SELECT * FROM Product_sales WHERE From_date >= '03-Jan-2013' AND To_date < = '09-Jan-2013' 

Ca a toujours bien fonctionné pour moi 😉

Ce travail sur SQL_Server_2008 R2

 Select * from Product_sales where From_date between '2013-01-03' and '2013-01-09' 
 SELECT NULL FROM HRMTable hm(NOLOCK) WHERE hm.EmployeeID = 123 AND ( ( CAST(@Fromdate AS date) BETWEEN CAST(hm.FromDate AS date) AND CAST(hm.ToDate AS date) ) OR ( CAST(@Todate AS date) BETWEEN CAST(hm.FromDate AS date) AND CAST(hm.ToDate AS date) ) ) ) 

Cochez cette requête, j’ai créé cette requête pour vérifier si la date d’enregistrement sur le tour avec des dates de réservation

 SELECT * FROM tbl_ReservedRooms WHERE NOT ('@checkindate' NOT BETWEEN fromdate AND todate AND '@checkoutdate' NOT BETWEEN fromdate AND todate) 

cela annulera les détails qui se chevauchent, pour obtenir les détails qui ne se chevauchent pas, puis enlevez le ‘NOT’ de la requête

Vous pouvez également essayer d’utiliser les fragments suivants:

 select * from Product_sales where From_date >= '2013-01-03' and game_date < = '2013-01-09' 

C’est facile, utilisez cette requête pour trouver des données sélectionnées dans la plage de dates entre deux dates

 select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5') 

Vous devriez comparer les dates dans sql comme vous comparez les valeurs de nombre,

 SELECT * FROM Product_sales WHERE From_date >= '2013-01-01' AND To_date < = '2013-01-20' 

Voici une requête pour trouver toutes les ventes de produits en cours au mois d’août

  • Trouver Product_sales là-bas étaient actifs au mois d’août
  • Inclure tout ce qui a commencé avant la fin du mois d’août
  • Exclure tout ce qui a pris fin avant le 1er août

Ajoute également une instruction de cas pour valider la requête

 SELECT start_date, end_date, CASE WHEN start_date < = '2015-08-31' THEN 'true' ELSE 'false' END AS started_before_end_of_month, CASE WHEN NOT end_date <= '2015-08-01' THEN 'true' ELSE 'false' END AS did_not_end_before_begining_of_month FROM product_sales WHERE start_date <= '2015-08-31' AND end_date >= '2015-08-01' ORDER BY start_date; 

Ce code fonctionnera bien:

Manette:

 $this->load->model("YourModelName"); $data ['query'] = $this->YourModelName->get_report(); 

Modèle:

  public function get_report() { $query = $this->db->query("SELECT * FROM reservation WHERE arvdate < = '2016-7-20' AND dptrdate >= '2016-10-25' "); return $query; } 

où ‘arvdate’ et ‘dptrdate’ sont deux dates sur la firebase database et ‘reservation’ est le nom de la table.

Vue:

 < ?php echo $query->num_rows(); ?> 

Ce code doit renvoyer le nombre de lignes. Pour renvoyer des données de table, utilisez

 $query->rows(); return $row->table_column_name; 

c’est facile, utilisez cette requête pour trouver ce que vous voulez.

 select * from Product_Sales where From_date< ='2018-04-11' and To_date>='2018-04-11'