Expiry DateEnd
None 2000-06-29 00:00:00.000
None 2000-06-29 00:00:00.000
september 2013 2013-06-29 00:00:00.000
January 2012 2013-06-29 00:00:00.000
May 2020 2013-06-29 00:00:00.000
2013-06-29 00:00:00.000 2013-06-29 00:00:00.000
由于未来的日期,我希望从两列中挑选除2020年5月行以外的所有日期。 这就是我到目前为止所拥有的
DECLARE @YearFlag datetime
SET @YearFlag = DATEADD(yy,-5,GETDATE())
SELECT *
FROM #Table
WHERE (DateEnd IS NULL OR DateEnd = '' OR DateEnd <= @YearFlag)
OR (CHARINDEX(Convert(varchar, YEAR(GETDATE())),Expiry) > 0)
使用下面的一个来选择2012年1月的行,但收到错误
OR (Expiry != 'none' AND Expiry <= GETDATE())
答案 0 :(得分:0)
我假设你想从你的选择中排除未来的日期,所以你可以使用这样的东西。
(另外,请指定RDBMS,因为GETDATE()函数可能在您正在使用的函数中不可用)
SELECT Expiry,
DateEnd
FROM YOUR_TABLE
WHERE Expiry <> 'none'
AND convert(INT, substring(expiry, charindex(' ', expiry, 0), len(expiry))) < YEAR(GETDATE())
AND CASE LOWER(substring(expiry, 0, charindex(' ', expiry, 0)))
WHEN 'january' THEN 1
WHEN 'february' THEN 2
WHEN 'march' THEN 3
WHEN 'april' THEN 4
WHEN 'may' THEN 5
WHEN 'june' THEN 6
WHEN 'july' THEN 7
WHEN 'august' THEN 8
WHEN 'september' THEN 9
WHEN 'october' THEN 10
WHEN 'november' THEN 11
ELSE 12
END < MONTH(GETDATE())
以下是代码如何运作的SQLFiddle。