我在这里不知所措。我正在尝试从批处理脚本中获取一个厘米秒变量,并使用sqlcmd将该变量拖到sql表中。那部分工作得很好。最让我头疼的是,我试图把这个变量从厘米秒转换成分钟。
我知道这个批处理几乎无法处理浮点数,所以我想我会偷偷摸摸地处理它,这样我就可以在我的sql表中离最近的第十位有几分钟的时间了。我在批处理文件中保留了以厘米为单位的数学,并决定在sqlcmd外部查询中进行转换,如下所示:
sqlcmd -S <SERVER> -d <DATABASE> -v Var1="%variable1%" Var2="%variable2%"
Var3="%variable3%" Var4="%variable4%" -i "\\path\to\the\query.sql"查询如下所示,其中Var3是我正在转换的变量。
INSERT INTO table VALUES ($(Var1), $(Var2), ROUND(($(Var3)/6000),2), $(Var4))但是,当我查看sql表中的条目时,它根本没有被圆形函数更改。不管我的论点是1,2,3等等.它保持四舍五入至最近的整数值。
我遗漏了什么东西吗?不应该将Var3值转换为查询中的浮点值然后转储到其中吗?
发布于 2014-12-30 15:22:43
是特定类型的,因此您应该将整数转换为浮点数,如下所示:
ROUND(CAST(($Var3) AS float) / 6000), 2)或者使用浮动除法,如下所示:
ROUND(($Var3 / 6000.0), 2)返回具有更高优先级的参数的数据类型。 有关更多信息,请参见数据类型优先(Transact-SQL)。
发布于 2014-12-30 15:22:04
我假设Var3是int -除以int的结果在int中。一个简单的解决方法是将6000更改为6000.0。
https://stackoverflow.com/questions/27707869
复制相似问题