太忙好久没更新博客了,今天随便写个吧,当做个笔记。
SQL Server在处理数值型的数据中,默认为INT型,以下的问题,可能你会遇到。
--结果为2,可能并非你想要的结果 SELECT 5 / 2; --结果为2.5,INT向小数型转换 SELECT 1.0 * 5 / 2; --溢出,INT的范围是-2147483648 ~ 2147483647 SELECT 65536 * 65536; --溢出,在转换BIGINT前还是INT SELECT CAST(65536 * 65536 AS BIGINT); --INT会向BIGINT转换 DECLARE @b BIGINT = 65536; SELECT @b * 65536; --BIGINT型 DECLARE @a BIGINT = 65536; SELECT @a * @a; --INT向FLOAT转换 DECLARE @c FLOAT = 65536000; SELECT @c * 65536000; --溢出 SELECT POWER(2, 31); --正确结果 DECLARE @d BIGINT = 2; DECLARE @e BIGINT = 31; SELECT POWER(@d, @e);
数据类型优先级:
https://msdn.microsoft.com/en-us/library/ms190309.aspx