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 veux sélectionner des données de vente entre deux dates dans une plage de dates?
Par exemple, je souhaite sélectionner des données de vente de 2013-01-03
à 2013-01-09
.
Comme vous pouvez le constater, il y a deux façons de faire avancer les choses:
Évidemment, la deuxième voie est beaucoup plus simple (deux cas seulement 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 pourrait être entre votre plage de dates ou les dates d'enregistrement pourraient couvrir la plage entière.
Si l'un des From_date
ou To_date
se situe entre les dates ou si From_date
est inférieur à la date de début et To_date
est supérieur à la date de fin; alors cette ligne devrait être retournée.
Essayez la requête suivante pour obtenir des dates comprises dans 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'
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' ) )
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)
Juste mes 2 centimes, je trouve que l’utilisation du format "jj-mmm-aaaa" est la plus sûre, car le serveur de base de données saura ce que vous voulez, quels que soient les paramètres régionaux définis sur le serveur. Sinon, vous pourriez potentiellement rencontrer des problèmes sur un serveur dont les paramètres 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'
Cela a toujours bien fonctionné pour moi ;-)
Cette requête vous aidera à:
select *
from XXXX
where datepart(YYYY,create_date)>=2013
and DATEPART(YYYY,create_date)<=2014
Cela fonctionne sur SQL_Server_2008 R2
Select *
from Product_sales
where From_date
between '2013-01-03' and '2013-01-09'
C'est facile, utilisez cette requête pour trouver des données sélectionnées dans la plage de dates comprise entre deux dates.
select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')
Vous pouvez aussi essayer d'utiliser les fragments suivants:
select * from Product_sales
where From_date >= '2013-01-03' and game_date <= '2013-01-09'
Vérifiez cette requête, j'ai créé cette requête pour vérifier si la date d'arrivée au 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)
ceci retournera les détails qui se chevauchent, pour obtenir les détails qui ne se chevauchent pas, puis supprimez le "NON" de la requête
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)
)
)
)
Vous devriez comparer les dates en SQL comme vous comparez les valeurs numériques,
SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'
Cela couvre toutes les conditions que vous recherchez.
SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')
DECLARE @monthfrom int=null,
@yearfrom int=null,
@monthto int=null,
@yearto int=null,
@firstdate DATE=null,
@lastdate DATE=null
SELECT @firstdate=DATEADD(month,@monthfrom-1,DATEADD(year,@yearfrom-1900,0)) /*Setting First Date using From Month & Year*/
SELECT @lastdate= DATEADD(day,-1,DATEADD(month,@monthto,DATEADD(year,@yearto-1900,0)))/*Setting Last Date using From Month & Year*/
SELECT * FROM tbl_Record
WHERE (DATEADD(yy, Year - 1900, DATEADD(m, Month - 1, 1 - 1)) BETWEEN CONVERT(DATETIME, @firstdate, 102) AND
CONVERT(DATETIME, @lastdate, 102))
Voici une requête pour trouver toutes les ventes de produits en cours d’exécution au mois d’août.
Ajoute également une déclaration 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;
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'
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 dans la base de données et 'réservation' est le nom de la table.
Vue:
<?php
echo $query->num_rows();
?>
Ce code doit renvoyer le nombre de lignes. Pour renvoyer les données de la table, utilisez ensuite
$query->rows();
return $row->table_column_name;