我尝试将IP设置为国家/地区查询。
最简单的方法是像这样进行查询:
select Country
from dbip
where 8 * power(255,3) +
8 * power(255,2) +
8 * power(255,1) + 8
between FromIPInt and ToIPInt
适用于小型Google的IP,但适用于更高的IP: 将表达式转换为数据类型int的算术溢出错误。
我可以用哪种方式计算它?
答案 0 :(得分:2)
CAST是解决方案,但你确实把它放在了正确的位置:
select Country
from dbip
where cast(255 as bigint) * power(255,3)
+ 255 * power(255,2)
+ 255 * power(255,1)
+ 255
between FromIPInt and ToIPInt
如果您对整个计算进行CAST,则会发生错误 将表达式转换为数据类型int 的算术溢出错误:
select cast(255 * power(255,3) as bigint)
但如果你投出第一个数字
则不行select cast(255 as bigint) * power(255,3)
有关该问题的更多详细信息:https://msdn.microsoft.com/en-us/library/ms187745.aspx
大于2,147,483,647的整数常量将转换为十进制数据类型,而不是bigint数据类型。
SQL Server不会自动将其他整数数据类型(tinyint,smallint和int)提升为bigint。