2015-10-17 2 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 A' строка

Какая ошибка? Может ли кто-нибудь помочь мне решить проблему?

ответ

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 

и все должно быть хорошо .....

Это предполагает, что inputDate и startingWork являются оба типа данных 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 
Смежные вопросы

 Смежные вопросы