SQL Server 2008 - PullRequest
       11

SQL Server 2008

0 голосов
/ 21 ноября 2018

Извините за мой английский ...

Я оставляю таблицу с колонкой

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

Как мне искать проект abc с месяцем = 2 года = 2017 до месяц = ​​1 год = 2018

Насколько я знаю, SQL Server 2008 не может использовать функцию concat

Ответы [ 4 ]

0 голосов
/ 11 декабря 2018

Как я могу найти abc проекта с месяцем = 2 года = 2017 до месяца = 1 год = 2018

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

SELECT *
FROM T
WHERE (([Year] * 10) + [Month]) BETWEEN 20172 AND 20181
      AND
      project = 'abc';

Демо

0 голосов
/ 21 ноября 2018

Использовать математическое сравнение:

SELECT * FROM table1
WHERE (year * 12 + month) BETWEEN (2017 * 12 + 1) AND (2018 * 12 + 1)
0 голосов
/ 21 ноября 2018

Я изменил код, чтобы учесть ведущий ноль в месяце.

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 голосов
/ 21 ноября 2018

Попробуйте это:

Select  *
From    YourTable
Where   DATETIMEFROMPARTS(year, month, 1, 1, 1, 1, 1) 
  between '2017-02-01' And '2018-01-01' 
...