我有一个表,其中2列被称为月和年,都是INT。我需要返回所有小于提供日期的记录。
因此,如果我传递以下参数@Month = 8
和@Year = 2017
,我想在2017年8月之前返回所有记录。实现此目的的最佳方法是什么?
SELECT * FROM testTable
WHERE year <= @Year AND
month < @Month
是我目前的SQL。如果我需要显示2014年11月的记录,这将无法工作
答案 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'