SQL Server浮点数据类型行为
我有一个动态SQL SP,它作用于动态创建的表 此SP动态生成的特定查询如下所示: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
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')'
或
你的是修复,但上面的是它的答案。你的是修复,但上面的是它的答案。