返回小于日期的记录

时间:2018-01-18 15:30:37

标签: sql sql-server

我有一个表,其中2列被称为月和年,都是INT。我需要返回所有小于提供日期的记录。

因此,如果我传递以下参数@Month = 8@Year = 2017,我想在2017年8月之前返回所有记录。实现此目的的最佳方法是什么?

SELECT * FROM testTable
WHERE year <= @Year AND
      month < @Month

是我目前的SQL。如果我需要显示2014年11月的记录,这将无法工作

4 个答案:

答案 0 :(得分:3)

将它们作为日期进行比较。像这样:

SELECT * FROM testTable
WHERE  DATEFROMPARTS(year, month, 1) <= DATEFROMPARTS(@Year, @Month, 1)

答案 1 :(得分:0)

将参数作为日期传递。喜欢

DECLARE @MyDate DATE = '08-01-2014'

现在你可以选择以下任何一种

SELECT
  *
  FROM YourTable
     WHERE CAST(ConCAT([Monnth],'-01-',[Year]) AS DATE) = @MyDate

或者

SELECT
   *
   FROM YourTable
      WHERE [Year] = YEAR(@MyDate)
            AND [Month] = MONTH(@MyDate)

答案 2 :(得分:0)

您可以使用SQL Server的DATEPART功能

 SELECT * FROM testTable
 WHERE YEAR<= DATEPART(yy,yourdate) AND
 MONTH < DATEPART(mm,yourdate)

答案 3 :(得分:0)

最好转换数据类型并进一步查询。

    DECLARE @testtable TABLE (id INT identity(1, 1), name VARCHAR(100), year INT, month INT)

INSERT INTO @testtable (name, year, month)
SELECT 'me', '2014', 10

UNION

SELECT 'you', '2017', 08

UNION

SELECT 'us', '2015', 10

UNION

SELECT 'Him', '2017', 10

UNION

SELECT 'Her', '2018', 1

SELECT *
FROM @testtable
WHERE CONCAT (year, '-', right('00' + cast(Month AS VARCHAR(2)), 2), '-', '01') 
< = '2017-08-01'