2013-01-25 174 views
0

時從字符串轉換日期時間,我有以下步驟:SQL:插入日期

ALTER PROCEDURE [dbo].[myProcedute] 
    @mydate VARCHAR(8000) = NULL 

IF @mydate = '' 
     BEGIN 
      SET @mydate = NULL 
     END 
     ELSE 
     BEGIN 
     SET @mydate = CONVERT(DATETIME, @mydate, 103) -- dd/mm/yy 
     END 

    INSERT INTO dbo.myTable(theDate) VALUES(@mydate) 

我執行它是這樣的:

EXEC [dbo].[myProcedure] '02/02/2012' 

執行後,我得到這個錯誤: 轉換失敗當從字符串轉換日期時間。

我從我的vb6代碼執行它,日期可能會有所不同。這次是 '02/02/2012',但下次可能是''(空)。

當它作爲'',我需要它插入一個NULL,你可以在IF子句中看到。

爲什麼我會收到此錯誤?

非常感謝!

+1

爲什麼不將'@ mydate'定義更改爲'DATE'? – Luv

+0

嘗試 如果LTRIM(@mydate)='' –

+0

我建議TO_DATE(LTRIM(@mydate),'DD/MM/YY') –

回答

1

使用ISDATE()檢查它是否是有效的日期。

轉換看起來不錯。正如評論指出,這將解決很多,如果你可以改變參數DATE

ALTER PROCEDURE [dbo].[myProcedute] 
    @mydate VARCHAR(8000) = NULL 

IF ISDATE(@mydate) 
    BEGIN 
     SET @mydate = CONVERT(DATETIME, @mydate, 103) -- dd/mm/yy 
    END 
    ELSE 
    BEGIN 
     SET @mydate = NULL   
    END 

INSERT INTO dbo.myTable(theDate) VALUES(@mydate) 
0

最好是你的日期字符串格式化爲ISO格式yyyymmdd),它保證在任何SQL的工作服務器。假設你的VB代碼傳遞它像dd/mm/yyyy(根據你的數據)。嘗試這個;

--Format @mydate to yyyymmdd 
SELECT @mydate = CASE LEN(@mydate) WHEN 10 
     THEN RIGHT(@mydate,4)+ SUBSTRING(@mydate,4,2)+ LEFT(@mydate,2) 
     ELSE NULL END 
--Insert 
INSERT INTO dbo.myTable(theDate) VALUES(@mydate)