Désolé pour mon anglais...

J'ai une table avec colonne

project, month, year
abc      2      2017
xyz      5      2017
abc      3      2017
abc      5      2017
abc      1      2018 

Comment puis-je rechercher un projet abc avec month = 2 year = 2017 to month = 1 year = 2018

Autant que je sache, SQL Server 2008 ne peut pas utiliser la fonction concat

0
vai.becker 21 nov. 2018 à 01:33

3 réponses

Meilleure réponse

Utilisez la comparaison mathématique:

SELECT * FROM table1
WHERE (year * 12 + month) BETWEEN (2017 * 12 + 1) AND (2018 * 12 + 1)
3
forpas 20 nov. 2018 à 23:05

Essaye ça:

Select  *
From    YourTable
Where   DATETIMEFROMPARTS(year, month, 1, 1, 1, 1, 1) 
  between '2017-02-01' And '2018-01-01' 
1
Jon Vote 20 nov. 2018 à 22:54

J'ai modifié le code pour tenir compte du zéro non significatif du mois.

Declare     @temp Table 
    (
        project varchar(50), 
        month   int, 
        year    int 
    );

Insert  Into    @temp 
        (project, month, year) 
Values  ('abc', 2, 2017) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('xyz', 5, 2017) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('abc', 3, 2017) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('abc', 5, 2017) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('abc', 1, 2018) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('xxx', 5, 2010) 

Insert  Into    @temp 
        (project, month, year) 
Values  ('xxx', 12, 2018) 


Declare @FromYear   int = 2010;
Declare @FromMonth  int = 04;
Declare @ToYear     int = 2018; 
Declare @ToMonth    int = 05;

Select  *  
From    @temp  
Where   Convert(varchar, year) + right('00' + Convert(varchar, month), 2) Between '201004' and '201805'
0
Jon Vote 21 nov. 2018 à 17:39