2013-09-01 22 views
2

我有一個數據庫,出於某種原因,日期放在1yymmdd中。我被要求在查詢中創建一個字段,這個字段在這個日期中增加了30天。我已經改變了日期爲可讀的格式如下:添加拼湊日期的日子

SUBSTRING(Datefield, 4, 2) + '/' + SUBSTRING(Datefield, 6, 2) 
    + '/' + SUBSTRING(Datefield, 2, 2) AS LookLikeDate 

我把這個在視圖中,並試圖再:

DATEADD(dd,30, CONVERT(datetime, v.[LookLikeDate], 103) 

我不斷收到寫着

錯誤

將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。

我然後試圖在我看來語句來定義,使該領域會從一開始就日期時間:

CONVERT(datetime, SUBSTRING(Datefield, 4, 2) + '/' 
    + SUBSTRING(Datefield, 6, 2) + '/' 
    + SUBSTRING(Datefield, 2, 2), 103) AS LookLikeDate 

當我在這個定義的錯誤,到了那裏我不能使用查看所有,我改變了日期時間爲Char(8),這給了我以前得到的同樣的varchar錯誤。

我該怎麼解決這個問題,有沒有辦法將這些日子添加到這種簡單的日期格式?

回答

1

只是爲了加30天,你可以做

SELECT DATEADD(dd, 30, RIGHT(datefield, 6)) NewDate 
    FROM table1 

要增加30天,轉換回該格式使用

SELECT '1'+ CONVERT(VARCHAR(6), DATEADD(dd, 30, RIGHT(datefield, 6)), 12) NewDate 
    FROM table1 

如果你有下面的示例數據

 
| DATEFIELD | 
|-----------| 
| 1130801 | 
| 1130812 | 
| 1120827 | 

然後上面提到的兩個查詢的輸出將是

 
|       NEWDATE | 
|----------------------------------| 
| August, 31 2013 00:00:00+0000 | 
| September, 11 2013 00:00:00+0000 | 
| September, 26 2012 00:00:00+0000 | 

 
| NEWDATE | 
|---------| 
| 1130831 | 
| 1130911 | 
| 1120926 | 

分別。

這裏是SQLFiddle演示

+0

@ user2736625有沒有幫助? – peterm

+0

對不起,我還沒有時間跳到現在,然後嘗試。我剛剛嘗試過,並收到'241號信息,第16級,狀態1,第2行 轉換日期和/或時間從字符串轉換失敗.'錯誤。我是否需要更改數據存儲的格式?目前它存儲爲Char(7)。 – user2736625

+0

有多奇怪...... 當我運行我的查詢爲'DATEADD(dd,30,RIGHT(datefield,6))'時,它會出錯。但是,當我使用RIGHT(datefield,6)NewDate創建視圖,然後在視圖上運行'DATEADD(dd,30,v.NewDate)'查詢時,它正在工作。 – user2736625