从字符串转换日期和/或时间时,转换失败。datediff函数导致的

时间:2020-12-04 01:29:01
select  datediff(mi,clockInRecord.fQDSJ,clockInRecord.fQTSJ) as mi,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''



fQDSJ和fQTSJ都是varchar(100),存储的数据格式都是08:25:09这种,但是执行SqlServer就报

消息 241,级别 16,状态 1,第 1 行
从字符串转换日期和/或时间时,转换失败。

我就是想计算时间差多少分钟,表的数据类型不变,求问大神怎么解决?

9 个解决方案

#1


没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算

#2


select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?

#3


引用 1 楼 sinat_28984567 的回复:
没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?

#4


引用 3 楼 amberbun 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?


检查一下是不是有的数据不是 08:25:09 这样的,而就是asdfas 这样的字符串?

#5


引用 4 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 amberbun 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?


检查一下是不是有的数据不是 08:25:09 这样的,而就是asdfas 这样的字符串?




有数据是08:30这种格式的,除了 08:25:09 和 08:30 其他别的格式的没有

#6


中间冒号没有中文的吧?select一下看看有没有

#7


引用 6 楼 sinat_28984567 的回复:
中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''

#8


引用 7 楼 amberbun 的回复:
Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


那有没有08:25:这样的情况呢?最后多一个冒号的,估计还是数据有问题

#9


引用 7 楼 amberbun 的回复:
Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 7 楼 amberbun 的回复:

Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


那有没有08:25:这样的情况呢?最后多一个冒号的,估计还是数据有问题



果然是数据问题!!混进了一条奇怪的数据!!!谢谢大神提醒!

#1


没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算

#2


select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?

#3


引用 1 楼 sinat_28984567 的回复:
没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?

#4


引用 3 楼 amberbun 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?


检查一下是不是有的数据不是 08:25:09 这样的,而就是asdfas 这样的字符串?

#5


引用 4 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 amberbun 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

没有日期计算出来准吗?比如两个08:24 08:25 可能一个今天一个昨天的,这样怎么算?如果不存在这种跨天的,那就在时间前边随便加个日期,转换成datetime之后再用datediff计算



select  datediff(mi,CONVERT(datetime,clockInRecord.fQDSJ,108),CONVERT(datetime,clockInRecord.fQTSJ,108)) as mi,clockInRecord.fKQH 
        from  dbo.OA_ClockInRecord clockInRecord  
            where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


做了时间转换,默认用了世纪时间,一样报错,问题不是在于日期统一吧?


检查一下是不是有的数据不是 08:25:09 这样的,而就是asdfas 这样的字符串?




有数据是08:30这种格式的,除了 08:25:09 和 08:30 其他别的格式的没有

#6


中间冒号没有中文的吧?select一下看看有没有

#7


引用 6 楼 sinat_28984567 的回复:
中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''

#8


引用 7 楼 amberbun 的回复:
Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


那有没有08:25:这样的情况呢?最后多一个冒号的,估计还是数据有问题

#9


引用 7 楼 amberbun 的回复:
Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 7 楼 amberbun 的回复:

Quote: 引用 6 楼 sinat_28984567 的回复:

中间冒号没有中文的吧?select一下看看有没有



没有中文的,但是查询的时候发现了一个问题,fQDSJ转换有问题,fQTSJ转换没问题

select  Convert(datetime,clockInRecord.fQDSJ,108) ,clockInRecord.fKQH 
from  dbo.OA_ClockInRecord clockInRecord  
where clockInRecord.fQTSJ<>'' and clockInRecord.fQDSJ <>''


那有没有08:25:这样的情况呢?最后多一个冒号的,估计还是数据有问题



果然是数据问题!!混进了一条奇怪的数据!!!谢谢大神提醒!