社区
疑难问题
帖子详情
一个奇怪的问题?
fzc20031210
2004-05-08 09:01:10
select 1.0*right(269,1)和select 1.0*right(269,2)两个SQL语句为什么第一个执行正确,而第二个提示"不能转换为NUMERIC类型"?
select right(469,1)+left(998,2)+2执行后结果为1001,为什么结果不是110?
...全文
80
16
打赏
收藏
一个奇怪的问题?
select 1.0*right(269,1)和select 1.0*right(269,2)两个SQL语句为什么第一个执行正确,而第二个提示"不能转换为NUMERIC类型"? select right(469,1)+left(998,2)+2执行后结果为1001,为什么结果不是110?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
8992026
2004-05-08
打赏
举报
回复
只有一个结论:
尽量不要让sql server自动转化数据类型,而是自己显式的转换
8992026
2004-05-08
打赏
举报
回复
select 9.99*'69.1'
也出错
8992026
2004-05-08
打赏
举报
回复
那sql server有点弱智了,varchar(2)为什么不自动转化成numeric(3,1)而要转化成numeric(2,1),自动转化就出错了
zjcxc
2004-05-08
打赏
举报
回复
select 1.0*69/2
--你看结果,实际是全部转换成float类型在计算
zjcxc
2004-05-08
打赏
举报
回复
--这是纯数字的计算,与有字符串的数据类型的确定方式又不同.
1.0*69/2
8992026
2004-05-08
打赏
举报
回复
select 1.0*right(269,2) 将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
select 0.1*right(269,2) 将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
select 0.01*right(269,2) 将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
select 0.0001*right(269,2) 将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
select 9.99999999*right(269,2) 将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
select 10.0*right(269,2) 690.00
fzc20031210
2004-05-08
打赏
举报
回复
1.0*69/2为什么不会产生溢出?
zjcxc
2004-05-08
打赏
举报
回复
--你看下面的,结果都能正确,就是因为后面的转换是依据前面的numiric类型
select 1.0*right(269,1) --1.0,对应的类型是numeric(2,1)
,11.0*right(269,2) --11.0,对应的类型是numeric(3,1)
,111.0*right(269,3) --111.0,对应的类型是numeric(4,1)
zjcxc
2004-05-08
打赏
举报
回复
不是转换成int,而是转换成numeric(2,1)
--再取后两位69,因为要乘,转化为前面的那种类型:numeric(2,1)
fzc20031210
2004-05-08
打赏
举报
回复
1.0的数据类型自动当作numeric(2,1)了,那1为NUMERIC(1,0),与69相乘不也溢出了,我有点昏,请再解释一下?马上送分
8992026
2004-05-08
打赏
举报
回复
问题变复杂了:
select 1.0*right(269,1) 9.00
select 2.0*right(269,1) 18.00
select 9.0*right(269,1) 81.00
select 99.0*right(269,1) 891.00
都不出错
zjcxc
2004-05-08
打赏
举报
回复
--把你的意思写成语句,就是这样,你执行这句,是可以出结果的:
select 1.0*cast(right(269,2) as int)
8992026
2004-05-08
打赏
举报
回复
版主:那转化成什么?还是不转化?
zjcxc
2004-05-08
打赏
举报
回复
楼上,我觉得你的解释有点问题:
select 1.0*right(269,2)
1.0的数据类型自动当作numeric(2,1)了 --***同意
right(269,2)先把269转化成varchar --**同意
--再取后两位69,因为要乘,有转化为int --**这点不同意
8992026
2004-05-08
打赏
举报
回复
我慢慢解释给你听:
select 1.0*right(269,2)
1.0的数据类型自动当作numeric(2,1)了
right(269,2)先把269转化成varchar,再取后两位69,因为要乘,有转化为int
1.0*right(269,2) numeric(2,1)的1乘以整数69后溢出了numeric(2,1),出错
可以这么代替
select cast(1.0 as numeric(10,2))*right(269,2)
select right(469,1)+left(998,2)+2执行后结果为1001,为什么结果不是110
如上解释right(469,1)结果是varchar的9
left(998,2)结果是varchar的99
varchar的9+varchar的99=varchar的999 ,因为要加整数2自动转化成整数999
999+2=?,当然是1001
试试
select cast(right(469,1) as int)+left(998,2)+2
fzc20031210
2004-05-08
打赏
举报
回复
up
关于ATI显卡的
一个
奇怪
问题
?
近日编写shader的时候发现
一个
奇怪
的
问题
,在我的6200卡上以下shader代码可以正确的计算出结果,而在ATI 9600的卡上就是错误的,查了很多资料还是百思不得其解,那就当做一点点经验把它记录...
连号区间数 小明这些天一直在思考这样
一个
奇怪
而有趣的
问题
:
小明这些天一直在思考这样
一个
奇怪
而有趣的
问题
: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到
一个
长度...
古堡算式 福尔摩斯到某古堡探险,看到门上写着
一个
奇怪
的算式: ABCDE * ? = EDCBA
古堡算式 福尔摩斯到某古堡探险,看到门上写着
一个
奇怪
的算式: ABCDE * ? = EDCBA (abcde不能重复!) #include #include #include int main(){ int i,j; for(i=10000;i char tmp[17]; int tmpInt; ...
古堡算式_经典的全排列
问题
(福尔摩斯到某古堡探险,看到门上写着
一个
奇怪
的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也)
福尔摩斯到某古堡探险,看到门上写着
一个
奇怪
的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是,两人沉默了好久,还是没有算出合适的结果...
容器技术解决了什么
问题
?有何优缺点?
容器究竟解决了什么
问题
? 大多
问题
都是在运行环境改变时才显现的,可能是这样一种场景,开发者把代码从开发环境 push 到测试环境然后到更上层的环境。比如开发者在 Windows 上编写应用代码,但是上层环境(测试、...
疑难问题
22,300
社区成员
121,734
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章