SELECT DATEPART(YEAR, PURCHASE_DATE) AS TRANSACTION_YEAR, DATEPART(MONTH, PURCHASE_DATE) AS TRANSACTION_MONTH,
CASE WHEN DATEPART(YEAR, DUE_DATE) >= DATEPART(YEAR, PURCHASE_DATE) THEN DATEPART(YEAR, DUE_DATE)
ELSE DATEPART(YEAR, PURCHASE_DATE) END AS RELEASE_YEAR,
CASE WHEN (DATEPART(YEAR, DUE_DATE) = DATEPART(YEAR, PURCHASE_DATE) AND DATEPART(MONTH, DUE_DATE) >= DATEPART(MONTH, PURCHASE_DATE)) THEN DATEPART(MONTH, DUE_DATE)
WHEN DATEPART(YEAR, DUE_DATE) > DATEPART(YEAR, PURCHASE_DATE) THEN DATEPART(MONTH, DUE_DATE)
ELSE
DATEPART(MONTH, PURCHASE_DATE) END AS RELEASE_MONTH,
CAST(YEAR(CASE WHEN DATEPART(YEAR, DUE_DATE) >= DATEPART(YEAR, PURCHASE_DATE) THEN DATEPART(YEAR, DUE_DATE)
ELSE DATEPART(YEAR, PURCHASE_DATE) END) AS VARCHAR(4)) + RIGHT('0'+CAST(MONTH(CASE WHEN (DATEPART(YEAR, DUE_DATE) = DATEPART(YEAR, PURCHASE_DATE) AND DATEPART(MONTH, DUE_DATE) >= DATEPART(MONTH, PURCHASE_DATE)) THEN DATEPART(MONTH, DUE_DATE)
WHEN DATEPART(YEAR, DUE_DATE) > DATEPART(YEAR, PURCHASE_DATE) THEN DATEPART(MONTH, DUE_DATE)
ELSE
DATEPART(MONTH, PURCHASE_DATE) END) AS VARCHAR(2)),2)
FROM TEST
上的六個記錄樣本表產生鑄造給我錯誤的日期?
2012 1 2012 1 190501
2012 1 2013 12 190501
2011 1 2012 1 190501
2011 1 2011 1 190501
2012 1 2012 1 190501
2012 1 2012 2 190501
我在做什麼錯?
非常感謝!
這傷害了我的大腦。請構建一個更簡單的測試用例! – 2012-07-07 13:33:37
我猜對了SQL Server。如果這是錯誤的,請適當修改您的標籤。你已經展示了一些輸出結果,但是你不知道你想要達到什麼目標(你沒有告訴我們)。另外,你正在處理的列的數據類型是什麼?告訴我們*什麼是錯的。 – 2012-07-07 13:35:03
對不起,第五列給了我每個記錄相同的輸出,我不知道爲什麼? – 2012-07-07 13:40:12