SQL 中将 varchar 值转换为数据类型 int 时转换失败
Conversion failed when converting varchar value to data type int in SQL
我在获取 SQL 中两个时间值之间的差异时遇到了一些困难。我想 select 日期值开始和结束之间相差小于 5 秒的所有值。
我的数据是这样的
Stop
-----------------------
2017-10-04 16:32:06:000
Start
-----------------------
2017-10-04 16:32:02:000
上述情况就是其中一种情况。我在 where 子句中的代码只获取数据中小于 5 秒的值:
datediff(second, cast(stop as int), cast(start as int)) < 5
我也试过 datediff 没有转换为 int,但仍然收到同样的错误:
Conversion failed when converting the varchar vlue '2017-10-04 20:58:46:000' to data type int
而不是使用 datediff()
将秒数添加到开始时间:
where stop < dateadd(second, 5, start)
您应该将 date/times 存储为 date/time 类型,而不是字符串。但是,您至少有一个标准格式,因此您可以根据需要明确类型转换:
where convert(datetime, stop) < dateadd(second, 5, convert(datetime, start))
这实际上更准确,因为 datediff()
计算两个值之间的 "time boundaries",而不是实际秒数。
不过,datediff()
的主要问题是参数不是整数。所以你可以这样做:
datediff(second, start, stop) < 5
但第一种方法更好
这应该可行,您不需要强制转换即可在几秒钟内获得差异...
select datediff (SECOND,start, stop) from test
测试一下...
select 1
where ((select datediff (SECOND,start, stop) from test) > 5)
datediff() 查询:
测试 table:
我在获取 SQL 中两个时间值之间的差异时遇到了一些困难。我想 select 日期值开始和结束之间相差小于 5 秒的所有值。
我的数据是这样的
Stop
-----------------------
2017-10-04 16:32:06:000
Start
-----------------------
2017-10-04 16:32:02:000
上述情况就是其中一种情况。我在 where 子句中的代码只获取数据中小于 5 秒的值:
datediff(second, cast(stop as int), cast(start as int)) < 5
我也试过 datediff 没有转换为 int,但仍然收到同样的错误:
Conversion failed when converting the varchar vlue '2017-10-04 20:58:46:000' to data type int
而不是使用 datediff()
将秒数添加到开始时间:
where stop < dateadd(second, 5, start)
您应该将 date/times 存储为 date/time 类型,而不是字符串。但是,您至少有一个标准格式,因此您可以根据需要明确类型转换:
where convert(datetime, stop) < dateadd(second, 5, convert(datetime, start))
这实际上更准确,因为 datediff()
计算两个值之间的 "time boundaries",而不是实际秒数。
不过,datediff()
的主要问题是参数不是整数。所以你可以这样做:
datediff(second, start, stop) < 5
但第一种方法更好
这应该可行,您不需要强制转换即可在几秒钟内获得差异...
select datediff (SECOND,start, stop) from test
测试一下...
select 1
where ((select datediff (SECOND,start, stop) from test) > 5)
datediff() 查询: