2015-10-17 291 views
2

當我試圖執行此查詢。SQL Server錯誤轉換日期和/或時間從字符串轉換失敗

select  
    DATEDIFF(HOUR, CONVERT(varchar(19), inputDate), 
    CONVERT(varchar(19), startingWork)) 
from TICKET_LOG 

它返回一個SQL Server錯誤從字符串轉換日期和/或時間時

'17

轉換失敗-10-2015 11:30 :51'和'12/4/2014 8:38:00'字符串

什麼是錯誤?任何人都可以幫我解決這個問題嗎?

回答

0

你將其轉換爲字符串,請嘗試:

select DATEDIFF(HOUR,CONVERT(datetime,inputDate),CONVERT(datetime,startingWork)) 
from TICKET_LOG 

如果你仍然得到錯誤,它可能會涉及到的日期是不是在要求的格式。看看文件,看看格式,你可以通過:

https://msdn.microsoft.com/en-GB/library/ms187928.aspx

+0

它返回此錯誤「將varchar數據類型轉換爲日期時間數據類型導致超出範圍值。」 –

+0

您需要確保您輸入的值符合指定的格式。我將在我的答案中包含一個鏈接。 – Reisclef

0

你爲什麼轉換您DATETIME值的字符串?絕對不需要那樣做!只需使用

SELECT 
    DATEDIFF(HOUR, inputDate, startingWork) 
FROM 
    TICKET_LOG 

和所有要善於.....

這假定inputDatestartingWork都是數據類型DATETIME的 - 既然他們似乎表達日期&時間,那是什麼應該是

0

,如果您已經使用 TRY_CONVERT將幫助你找到解決您的回答,很遺憾,您的是2008年,這樣你們需要這樣的功能。

CREATE FUNCTION TryCastInt(@inputStr NVARCHAR(MAX)) 
RETURNS int 
AS 
BEGIN 
    DECLARE @ret INT; 
    SET @ret = -999999 

     IF(ISNUMERIC(@inputStr) = 1) 
      BEGIN 
      IF(CHARINDEX('.',@inputStr) = 0) 
       Begin 
       select @ret = cast (@inputStr AS INT) 
       END 
      END 
     ELSE 
      BEGIN 
      set @ret = -999999 
      END 

    RETURN @ret; 
END; 

現在您可以檢查列的錯誤字符模式。

SELECT *, 
    dbo.TryCastInt(varchar(19), inputDate), 
    dbo.TryCastInt(varchar(19), startingWork) 
FROM 
    TICKET_LOG 
相關問題