Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从字符串转换日期和/或时间时,SQL Server错误转换失败_Sql Server_Database_Sql Server 2008_Datetime - Fatal编程技术网

Sql server 从字符串转换日期和/或时间时,SQL Server错误转换失败

Sql server 从字符串转换日期和/或时间时,SQL Server错误转换失败,sql-server,database,sql-server-2008,datetime,Sql Server,Database,Sql Server 2008,Datetime,当我试图执行此查询时 它返回一个SQL Server错误 从字符串转换日期和/或时间时转换失败 “17-10-2015 11:30:51”和“12/4/2014 8:38:00 A”字符串 错误是什么?有人能帮我解决这个问题吗?如果要将其转换为字符串,请尝试: select DATEDIFF(HOUR,CONVERT(datetime,inputDate),CONVERT(datetime,startingWork)) from TICKET_LOG 如果仍然出现错误,则可能涉及日期格式不符合

当我试图执行此查询时

它返回一个SQL Server错误

从字符串转换日期和/或时间时转换失败

“17-10-2015 11:30:51”和“12/4/2014 8:38:00 A”字符串


错误是什么?有人能帮我解决这个问题吗?

如果要将其转换为字符串,请尝试:

select DATEDIFF(HOUR,CONVERT(datetime,inputDate),CONVERT(datetime,startingWork))
from TICKET_LOG
如果仍然出现错误,则可能涉及日期格式不符合要求。查看文档以了解可以传递的格式:


为什么要将
DATETIME
值转换为字符串??绝对没有必要那样做!只用

SELECT 
    DATEDIFF(HOUR, inputDate, startingWork)
FROM
    TICKET_LOG
一切都应该是好的


这假设
inputDate
startingWork
都是数据类型
DATETIME
——因为它们似乎表示日期和时间,所以应该是这样的

如果您使用的是2012 将帮助您找到答案的解决方案,不幸的是,您的是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

它返回此错误“将varchar数据类型转换为datetime数据类型导致值超出范围”。您需要确保输入的值与指定格式匹配。我将在我的答案中包含一个链接。
SELECT *,
   dbo.TryCastInt(varchar(19), inputDate),
   dbo.TryCastInt(varchar(19), startingWork)
FROM 
    TICKET_LOG