返回小于日期的记录



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

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

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

是我当前的 SQL。如果我需要显示 2014 年 11 月的记录,这将不起作用

将它们

作为日期进行比较。喜欢这个:

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

参数作为日期传递。喜欢

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)

您可以使用SQL Server的DATEPART函数

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

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

    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'

最新更新