SQL Server浮点数据类型行为

时间:2013-12-11 06:59:19

标签: sql floating-point int quote dynamic-tables

我有一个动态SQL SP,它可以作用于动态创建的表。

此SP动态生成的特定查询如下:

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'

请注意,[RATE]列的类型为Float

但是,对于[RATE]列类型为Int的另一个动态创建的表,同一查询失败。我知道这是因为参数周围有单引号。

这种行为差异的原因是什么?

2 个答案:

答案 0 :(得分:1)

您强制进行隐式转换以使数据类型匹配。这完全是type precedence

对于float列,我们有数据类型floatvarcharfloat获胜,我们尝试将'0.0''10.0'转换为float并成功。

对于int列,我们的数据类型为intvarcharint获胜,我们尝试将'0.0''10.0'转换为int并失败。

如果没有引号,对于int列,我们会有数据类型intdecimaldecimal获胜,我们尝试将int列值转换为decimal并成功。

答案 1 :(得分:0)

尝试将值'0.0'和'10 .0'转换/转换为int

[Rate]的

是Float

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'
[Rate]的

是Int

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN convert(int, '0.0') AND convert(int, '10.0')'

SELECT * FROM [DYNAMIC_TABLE] WHERE convert(float, [RATE]) BETWEEN '0.0' AND '10.0'