当我在下面运行查询时:
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]
提前感谢!
答案 0 :(得分:0)
要做dateiff,你必须有2个日期或日期时间值。要将字符串转换为日期或日期时间,您应该使用
CONVERT(date[time], 'yourdata', FORMAT)
该格式的
答案 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)