2015-11-24 70 views
-1

我需要在輸入時,爲了獲得前一個月和一年。所以,如果用戶鍵入201412,那麼它應該返回201411.如果他們輸入201501,那麼它應該返回201401.sql中得到比上月

+3

您正在使用哪個數據庫管理系統? Postgres的?甲骨文? –

+0

他們在哪裏打字? – CathalMF

+0

請閱讀如何問問http://stackoverflow.com/help/how-to-ask以改善您的問題。我們需要你的結構更具體,並提供給我們一個例子http://stackoverflow.com/help/mcve – davejal

回答

0

的快速方法在SQL Server數據庫上執行此操作將從字符串中創建日期元素,將其轉換爲日期類型,然後使用函數dateadd並添加-1個月(如果您願意,減去一個月)

像這樣:

select DATEADD(MONTH,-1,CAST(LEFT(201401,4)+'-'+RIGHT(201401,2)+'-01' AS DATE)) 

分解的步驟:

  1. 通過選擇4個最左邊的字符拿到年終
  2. 通過選擇2個最右邊的字符
  3. 添加分隔獲取月「 - 」和01與前兩個要素得到一個有效格式的字符串要轉換
  4. 將字符串到datetype啓用日期操作
  5. 使用DateAdd函數添加-1個月至該日期元素
  6. 手指交叉可用的輸入是不會破壞你的代碼
0

在SQL Server

DECLARE @dateAsNumber VARCHAR(8); 
SET @dateAsNumber = '198705'; 

DECLARE @DateConvertedFromNumber DATETIME; 
SELECT @DateConvertedFromNumber = CONVERT (DATETIME, CONVERT(CHAR(8), @dateAsNumber 
     + '01')) 

SELECT LEFT(CONVERT(VARCHAR, DATEADD(YEAR, -1, 
               @DateConvertedFromNumber), 112), 
      6) AS 'Year Before' 

SELECT LEFT(CONVERT(VARCHAR, DATEADD(MONTH, -1, 
               @DateConvertedFromNumber), 112), 
      6) AS 'Month Before' 
+0

謝謝。這真的有幫助! –

+0

沒有問題!不要忘記標記爲答案;) –

+0

我該怎麼做 –