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

2 つの列から、将来の日付のため、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

選択から将来の日付を除外したいので、このようなものを使用できると思います。

(また、GETDATE() 関数が使用していない可能性があるため、RDBMS を指定してください)

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 に答える