约会(MINUTE,[结束时间],[开始时间])

时间:2016-09-29 11:03:06

标签: sql sql-server

当我在下面运行查询时:

select datediff(MINUTE,[End Time],[Start Time]) 
from [LINKEDAF].[PRD Project].[Data].[EFAN1]

它会显示错误消息:

  

Msg 241,Level 16,State 1,Line 20   从字符串转换日期和/或时间时转换失败。

我尝试使用强制转换和转换,但同样的问题:

select datediff(MINUTE,convert(varchar(24),[End Time],120),convert(varchar(24),[End Time],120)) 
from [LINKEDAF].[PRD Project].[Data].[EFAN1]

select datediff(MINUTE,cast([End Time] as datetime),cast([End Time] as datetime)) 
from [LINKEDAF].[PRD Project].[Data].[EFAN1]

提前感谢!

4 个答案:

答案 0 :(得分:0)

要做dateiff,你必须有2个日期或日期时间值。要将字符串转换为日期或日期时间,您应该使用

CONVERT(date[time], 'yourdata', FORMAT)
该格式的

可以查看https://msdn.microsoft.com/de-de/library/ms187928.aspx

答案 1 :(得分:0)

您正在使用此

convert(varchar(24),[End Time],120)

虽然格式120意味着: yyyy-mm-dd hh:mi:ss(24h)

在评论中,您说明实际格式为DD/MM/YYYY HH:MM:SS

因此,您可以尝试使用131或尝试使用LEFT()RIGHT()分割您的值,并使用103投放日期,使用108投放时间。查找Details here

此外,您想要转换为datetime,因此您应该使用

convert(datetime,[End Time],131)   

更新示例

试试这个

DECLARE @tbl TABLE(YourValues VARCHAR(100));
INSERT INTO @tbl VALUES('09/09/2016 10:51:46'),('09/09/2016 10:50:38'),('09/09/2016 10:51:46')
                      ,('09/09/2016 10:50:38'),('09/09/2016 10:49:21'),('09/09/2016 10:44:58');

--This works
SELECT CONVERT(datetime,YourValues,131)
FROM @tbl

--And this too
SELECT CONVERT(DATETIME,LEFT(YourValues,10),103)+CONVERT(DATETIME,RIGHT(YourValues,8),108)
FROM @tbl

如果这对您没有帮助,您可以告诉我们您的看法,但不会告诉我们您的看法......

答案 2 :(得分:0)

首先尝试对该值使用ISDATE

  

如果表达式是有效的日期,时间或日期时间值,则返回1;否则,0。

     

如果表达式是datetime2值,则ISDATE返回0.

看看这个查询将返回什么:

SELECT  [End Time],
        [Start Time] 
FROM [LINKEDAF].[PRD Project].[Data].[EFAN1]
WHERE ISDATE([End Time]) = 0 OR ISDATE([Start Time]) = 0

在该帖子结果之后,可能有一些SQL无法正确解析的日期,或者有datetime2格式。

如果我使用您提供的值varchar,我会得到结果:

;WITH YourTable AS (
SELECT *
FROM (VALUES
('09/09/2016 10:51:46', '09/09/2016 10:50:38'),
('09/09/2016 10:49:21', '09/09/2016 10:44:58')
) as t([Start Time], [End Time])
)

SELECT DATEDIFF(MINUTE,[Start Time],[End Time])
FROM YourTable

给出:

-1
-5

答案 3 :(得分:0)

如果您使用的是SQL Server 2012或更高版本,请尝试使用以下脚本。

SELECT datediff(MINUTE,cast([EndTime] as datetime),cast([StartTime] as datetime)) 
FROM YourTable
WHERE TRY_CONVERT(DATETIME,[EndTime]) IS NOT NULL AND TRY_CONVERT(DATETIME,[StartTime])  IS NOT NULL

这是一个示例场景。

enter image description here