转换为float:CAST vs CONVERT vs * 1.0

时间:2012-12-04 12:50:05

标签: sql sql-server floating-point int

哪个是首选,为什么?为清晰起见,我使用整数值,但这些是字段名称。

  1. SELECT 2*1.0 / 3
  2. SELECT CAST(2 AS float) / 3
  3. SELECT CONVERT(float, 2) / 3

1 个答案:

答案 0 :(得分:3)

从关于第一个和CAST / CONVERT的性能角度来看,我快速创建了一个临时表,并使用值2查询它:

CREATE TABLE #temp (Two FLOAT)
INSERT INTO #temp VALUES (2)
SELECT * FROM #temp

SELECT Two*1.0 / 3 FROM #temp
SELECT Two*1E0 / 3 FROM #temp
SELECT CAST(Two AS FLOAT) / 3 FROM #temp
SELECT CONVERT(FLOAT,Two) / 3 FROM #temp

从中选择时,无论我输入多少个不同的值,执行计划和统计IO都会给我相同的数字(每个第四个)。我尝试输入其他值,如5,6,7,8,9等,甚至更多的值,但成本是一样的。从上面列出的超出关系的文章(这里:http://beyondrelational.com/modules/2/blogs/77/posts/11334/cast-vs-convert-is-there-a-difference-as-far-as-sql-server-is-concerned-which-is-better.aspx),看来使用你的第一个方法没有任何影响,至少在小值上(我确实使用了2,000,000)。