社区
疑难问题
帖子详情
一个奇怪的问题?
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?
...全文
49
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写文章
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
数据库存储的
奇怪
问题
!
暑假作的
一个
东西现在老师用了,说出了
问题
了,昨天改了改,发现是数据库的
问题
。但是很
奇怪
????情况是这样的:以前用asp做的东西,为了防止数据库被下载在数据库中开设了asp代码段,防止下载。而且在源文件中...
容器技术解决了什么
问题
?有何优缺点?
容器究竟解决了什么
问题
? 大多
问题
都是在运行环境改变时才显现的,可能是这样一种场景,开发者把代码从开发环境 push 到测试环境然后到更上层的环境。比如开发者在 Windows 上编写应用代码,但是上层环境(测试、...
一个
奇怪
BUG的记录(未根本解决)
一个
奇怪
BUG的记录(未根本解决).md基本逻辑:将文件夹下面的所有文件路径名,提取到
一个
configfile文件中,然后按行读取处理。代码:
问题
:对于bash数据集没有
问题
,但是对于redis数据集(文件比bash少)出现...
【VBA研究】
奇怪
的“?”----Unicode格式的字符处理
1、从网站导出的Excel文件单元格内容后面多了
一个
不可见字符,怎么造成的不知道,但不是每一列都有。想要用VBA代码去掉,就要先判断出是什么字符,将内容复制到文本环境中(比如编程环境或者UltraEdit中),发现最...
一个
奇怪
的
问题
在Linux下使用Bash新开
一个
terminal,进入~/aa新开第二个terminal,当前路径是~; 然后mv aa aa.bak回到第
一个
terminal,pwd显示还是~/aa, 照样能执行原来的程序,打开原来的文件; 如果到aa.bak中新建文件,这边也能看到...
疑难问题
22,207
社区成员
121,730
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章