sql 基础问题,求大神帮忙

IT~搬运工 2017-08-14 10:24:06
cast(0 as decimal(18,4)) as data1

update #temp1
set data1=1/2
from #temp1

为什么执行之后data1 还是0,不是0.5 呢
...全文
318 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
顺势而为1 2017-08-14
  • 打赏
  • 举报
回复
引用 楼主 qq_18756081 的回复:
cast(0 as decimal(18,4)) as data1 update #temp1 set data1=1/2 from #temp1 为什么执行之后data1 还是0,不是0.5 呢
SQL 中整数相除得到整数, 除非你转换成小数 if not object_id(N'Tempdb..#Temp1') is null drop table #Temp1 Go CREATE TABLE #temp1(data1 decimal(18,4)) INSERT INTO #temp1 ( data1 ) Values (0) update #temp1 set data1=(1.0/2) from #temp1 Select * From #Temp1
二月十六 版主 2017-08-14
  • 打赏
  • 举报
回复
set data1 = 值 data1 是表字段吧?和更新的值有什么关系?data1初始值是多少都无所谓
繁花尽流年 2017-08-14
  • 打赏
  • 举报
回复
update #temp1
set data1=1*1.0/2
from #temp1
这么写
见习水师 2017-08-14
  • 打赏
  • 举报
回复
1/2=0 这个结果不受 data1 类型的影响,要得到0.5 要 在 1 / 2 两个数字中的一个做类型转换。
OwenZeng_DBA 2017-08-14
  • 打赏
  • 举报
回复
引用 6 楼 qq_18756081 的回复:
[quote=引用 5 楼 z10843087 的回复:] [quote=引用 楼主 qq_18756081 的回复:] cast(0 as decimal(18,4)) as data1 update #temp1 set data1=1/2 from #temp1 为什么执行之后data1 还是0,不是0.5 呢
你这个1/2 要改成下面的这样,就可以
CREATE TABLE #temp1(data1 decimal(18,4))
INSERT INTO #temp1
        ( data1 )
VALUES  (  1.0/2.0  -- data1 - decimal
          )
          
 SELECT * FROM #temp1
[/quote] 我初始值需要时0啊[/quote] 是这样吗?初始值插入0. 关键是后面的update的值
CREATE TABLE #temp1(data1 decimal(18,4))
INSERT INTO #temp1
        ( data1 )
VALUES  (  0  -- data1 - decimal
          )
     SELECT * FROM #temp1     
          
UPDATE #temp1 SET data1=1.0/2.0
           
 SELECT * FROM #temp1
IT~搬运工 2017-08-14
  • 打赏
  • 举报
回复
引用 5 楼 z10843087 的回复:
[quote=引用 楼主 qq_18756081 的回复:] cast(0 as decimal(18,4)) as data1 update #temp1 set data1=1/2 from #temp1 为什么执行之后data1 还是0,不是0.5 呢
你这个1/2 要改成下面的这样,就可以
CREATE TABLE #temp1(data1 decimal(18,4))
INSERT INTO #temp1
        ( data1 )
VALUES  (  1.0/2.0  -- data1 - decimal
          )
          
 SELECT * FROM #temp1
[/quote] 我初始值需要时0啊
OwenZeng_DBA 2017-08-14
  • 打赏
  • 举报
回复
引用 楼主 qq_18756081 的回复:
cast(0 as decimal(18,4)) as data1 update #temp1 set data1=1/2 from #temp1 为什么执行之后data1 还是0,不是0.5 呢
你这个1/2 要改成下面的这样,就可以
CREATE TABLE #temp1(data1 decimal(18,4))
INSERT INTO #temp1
        ( data1 )
VALUES  (  1.0/2.0  -- data1 - decimal
          )
          
 SELECT * FROM #temp1
IT~搬运工 2017-08-14
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
SELECT 1/2
SELECT cast(1 as decimal(18,4))/2
我初始值只能为0,不能为1啊
二月十六 版主 2017-08-14
  • 打赏
  • 举报
回复
SELECT 1/2
SELECT cast(1 as decimal(18,4))/2


IT~搬运工 2017-08-14
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
因为 1/2 = 0
请问怎么样才能得到0.5
二月十六 版主 2017-08-14
  • 打赏
  • 举报
回复
因为 1/2 = 0

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧