1
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())
4

1 回答 1

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

于 2013-09-11T07:59:41.047 回答