2014-10-02 24 views
0

無法驗證日期格式我有TRANSACTIONS表col與BUSINESS_DATE(varchar 255)。由於Msg 8116

distinct LEN(BUSINESS_DATE) = 6 and 8 
--Sample data for BUSINESS_DATE 
071312 --mmddyy for LEN = 6 
08012012 --mmddyyyy for LEN = 8 

我想在TABLE SUNNY中將這些日期加載爲DATE。這是我的CASE聲明 -

select CASE WHEN LEN(BUSINESS_DATE) = 6 
       THEN CAST('20' + RIGHT(GRAND.[BUSINESS_DATE],2) + LEFT(GRAND.[BUSINESS_DATE],4) AS DATE) 
       WHEN LEN(BUSINESS_DATE) = 8 
       THEN CAST(RIGHT(GRAND.[BUSINESS_DATE],4) + LEFT(GRAND.[BUSINESS_DATE],4) AS DATE) 
       END            AS TRANS_DT 
    into SUNNY 
    from TRANSACTIONS GRAND 

所有記錄都已加載。現在當我嘗試執行下面的查詢來測試日期格式時,它會拋出錯誤信息8116.是否有人可以解釋這裏有什麼問題和如何我可以測試它嗎?

select top 5 * from 
SUNNY 
where ISDATE(TRANS_DT) = 1 
+1

如果列'SUNNY.TRANS_DT'是日期類型(我認爲你的問題說,這是),所有的記錄都沒有打石膏的錯誤加載事實證明,您的日期是有效的。 – 2014-10-02 17:50:42

回答

4

ISDATE函數不能使用DATE作爲它的參數;該文檔指出參數:

是可以轉換爲 字符串的字符串或表達式。表達式必須少於4,000個字符。 日期和時間數據類型(datetime和smalldatetime除外)不允許作爲ISDATE的參數使用 。

因此,無論是將值轉換爲DATETIME而不是DATE在select語句中,還是將ISDATE的參數強制轉換爲NVARCHAR。

雖然SELECT ... INTO的結果應該是正確的日期,或者演員失敗,並且沒有數據將被插入到SUNNY中,但該測試似乎沒有必要。

+0

謝謝@ jpw。 – 2014-10-02 18:01:59

0

嘗試此代碼以插入陽光表中。然後檢查 如果GRAND。[BUSINESS_DATE]列是varchar類型,則刪除convert函數。

select CASE WHEN LEN(BUSINESS_DATE) = 6 
      THEN CAST('20' + convert(varchar(5),RIGHT(GRAND.[BUSINESS_DATE],2))+'-'+ LEFT(GRAND.[BUSINESS_DATE],2)+'-'+substring(GRAND.[BUSINESS_DATE],3,2)) AS DATE) 
      WHEN LEN(BUSINESS_DATE) = 8 
      THEN CAST(RIGHT(GRAND.[BUSINESS_DATE],4) + RIGHT(GRAND.[BUSINESS_DATE],2))+'-'+ LEFT(GRAND.[BUSINESS_DATE],2)+'-'+substring(GRAND.[BUSINESS_DATE],3,2)) AS DATE) 
      END            AS TRANS_DT 
into SUNNY 
from TRANSACTIONS GRAND 
+0

我沒有機會檢查語法錯誤。所以有可能獲得語法錯誤 – 2014-10-02 18:00:11

相關問題