SQL Server浮点数据类型行为

SQL Server浮点数据类型行为,sql,floating-point,int,quote,dynamic-tables,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。我知道这是因为参数周围有单引号 这种行为差异的原因是什么?您正在强制执行隐式转换以使数据类型匹配。这都是关于 对于float列,我们有数据类型float和v

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

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

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'
请注意,
[RATE]
列的类型为
Float

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


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

您正在强制执行隐式转换以使数据类型匹配。这都是关于

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

对于
int
列,我们有数据类型
int
varchar
int
获胜,我们尝试将
'0.0'
'10.0'
转换为
int
s失败


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

您正在强制进行隐式转换以使数据类型匹配。这都是关于

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

对于
int
列,我们有数据类型
int
varchar
int
获胜,我们尝试将
'0.0'
'10.0'
转换为
int
s失败


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

尝试将值“0.0”和“10.0”转换/强制转换为int

因为[汇率]是浮动的

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')'


尝试将值“0.0”和“10.0”转换/强制转换为int

因为[汇率]是浮动的

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')'


你的是修复,但上面的是它的答案。你的是修复,但上面的是它的答案。