(SQL)将 expression 转换为数据类型 int 时发生算术溢出错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(SQL)将 expression 转换为数据类型 int 时发生算术溢出错误相关的知识,希望对你有一定的参考价值。

下面的程序报的错,求助高手
public string getipinfo(string ip)

string[] arr = ip.Split('.');
string sql = "SELECT address FROM ips WHERE (CONVERT(bigint, ipstar) <= CONVERT(bigint," + arr[0] + " * 256 * 256 * 256 + " + arr[1] + " * 256 * 256 + " + arr[2] + " * 256 + " + arr[3] + ")) AND (CONVERT(bigint,ipend) >= CONVERT(bigint, " + arr[0] + " * 256 * 256 * 256 + " + arr[1] + " * 256 * 256 + " + arr[2] + " * 256 + " + arr[3] + "))";
return dc.GetObject(sql).ToString();

传入参数122.224.115.190这个没报错,202.160.180.78这个就报错了

参考技术A 系统默认是int的,所以你应该先转换,再相乘,明白了吗?
比如:SELECT score FROM Score WHERE
(CONVERT(bigint, score) <=
CONVERT(bigint, (CONVERT(bigint, 202)* 256 * 256*256)))本回答被提问者采纳
参考技术B 系统默认是int的,所以你应该先转换,再相乘,明白了吗?
比如:SELECT
score
FROM
Score
WHERE
(CONVERT(bigint,
score)
<=
CONVERT(bigint,
(CONVERT(bigint,
202)*
256
*
256*256)))

SQL 将expression 转换为数据类型 datetime 时出现算术溢出错误

我的SQL代码如下:
declare
@s_date datetime
,@e_date datetime
set @s_date = '2014-08-01'
set @e_date = '2014-08-02'
SET @s_date = CONVERT(varchar(8),@s_date,112)
SET @e_date = CONVERT(varchar(8),@e_date,112)
select
@s_date s_date
,@e_date e_date
,a.doctor_code 工号
,d.employee_name 名字
,SUM(a.charge_amount*a.charge_price) 金额
,c.dept_name 科室
from dw_zy_costlist a(nolock)
left join dw_zy_opsapply b(nolock) on b.op_id=a.apply_no
left join dim_zy_ward c(nolock) on c.dept_id=a.dept_sn
left join dim_employee d(nolock) on d.employee_id=a.doctor_code
where
a.order_no=2
and a.datekey>@s_date
and a.datekey<@e_date
group by
a.doctor_code
,d.employee_name
,c.dept_name

在线等答案呀!!!
附:
1、CONVERT(varchar(8),@s_date,112)语句没错,可以成功将datetime型数据转换成类似 20140720 这样的字符串
2、如果我把where里面的@s_date和@e_date改为固定的值就不会出错
3、a.datekey为int型,值类似 20140720 这样(去掉横杠的日期)

参考技术A int 类型怎么可以和Datetime类型比较呢?肯定不行啊
declare
@s_date datetime
,@e_date datetime
set @s_date = '2014-08-01'
set @e_date = '2014-08-02'
SET @s_date = CONVERT(varchar(8),@s_date,112)
SET @e_date = CONVERT(varchar(8),@e_date,112)
print @s_date
print @e_date---看看出来是什么东西????

条件那里应该这么写:
a.datekey>CONVERT(varchar(8),@s_date,112)
and a.datekey<CONVERT(varchar(8),@e_date,112)本回答被提问者采纳

以上是关于(SQL)将 expression 转换为数据类型 int 时发生算术溢出错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL 将expression 转换为数据类型 datetime 时出现算术溢出错误

SQL怎么样把numeric类型的数据转换为varchar类型的数据

VBA 如何将一列字符转成日期

SQL 类型转换 学习

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别