Sql server 从字符串转换日期和/或时间时,SQL Server错误转换失败
当我试图执行此查询时 它返回一个SQL Server错误 从字符串转换日期和/或时间时转换失败 “17-10-2015 11:30:51”和“12/4/2014 8:38:00 A”字符串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 如果仍然出现错误,则可能涉及日期格式不符合
错误是什么?有人能帮我解决这个问题吗?如果要将其转换为字符串,请尝试:
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