SQL Server 中数据类型怎么实现隐式转换
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示: CREATE TABLE TES
千家信息网最后更新 2026年11月03日SQL Server 中数据类型怎么实现隐式转换
本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
如下所示:
CREATE TABLE TEST( ID INT, GOOD_TYPE VARCHAR(12), GOOD_WEIGHT NUMERIC(18,2))INSERT INTO dbo.TESTVALUES( 1, 'T1',1.27) SELECT GOOD_TYPE, CASE WHEN ( GOOD_TYPE = 'T1' ) THEN 99.1 + SUM(GOOD_WEIGHT) ELSE CEILING(SUM(GOOD_WEIGHT)) END AS GrossWeight , SUM(GOOD_WEIGHT) AS NetWeightFROM dbo.TESTGROUP BY GOOD_TYPE;
如上所示,为什么99.1 + SUM(GOOD_WEIGHT)变成100了呢? 原始SQL非常复杂,我们分析、排除掉各个因素后,始终不得要领,各种折腾中发现,如果这样转换一下(请见下面截图),居然就OK了,后面分析了一下,应该是CASE WHEN里面的不同数据类型导致隐式转换,说实话之前还真没有留意CASE WHEN中存在数据类型的隐性转换,但是为什么就一定从NUMERIC转换为INT了呢? 而不是INT隐性转换为NUMERIC呢, 说实话没有看到相关文档的官方,如果按照官方文档:
当两个不同数据类型的表达式用运算符组合后,优先级较低的数据类型首先转换为优先级较高的数据类型。 如果此转换不是所支持的隐式转换,则返回错误。 对于组合具有相同数据类型的操作数表达式的运算符时,运算的结果便为该数据类型
而我们知道,Decimal 和 NUMERIC 是同义词,可互换使用,而官方文档"数据类型优先级 (Transact-SQL)"中,Decimal的优先级明显高于INT,如果真要按照原理来解释,应该是INT转换NUMERIC才对(两种数据类型支持隐式转换),所以越想越糊涂,只知道有这么一回事,但是真正的Root Cause尚不清楚,而且在精确度要求较高的报表中,这种现象就会类似Bug一样的突然出现。需要谨慎留心!
上述内容就是SQL Server 中数据类型怎么实现隐式转换,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
数据
类型
优先级
官方
文档
运算
不同
说实话
内容
技能
知识
表达式
运算符
隐性
分析
支持
组合
原始
复杂
明显
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技有限公司
涨乐互联网科技
高科技与互联网
互联网科技博客
镁科技互联网资讯平台
北京华百购互联网科技有限公司
湖南诚度互联网科技有限公司
语蝶互联网科技有限公司
乌苏新华互联网科技做什么的
互联网新科技动漫ppt素材
中国互联网公司排名锤子科技
互联网数据科技专业
卓翼科技产业互联网合作
张召忠谈中国互联网科技
下一代互联网重大应用科技园
全球科技与互联网公司市值变化
互联网科技手机排行榜
陕西九四连强互联网科技有限公司
互联网科技手抄报图片
众联互联网络科技
花魁咖啡
新华互联网科技
互联网科技资迅
网络科技有限互联网
杭州互联网科技公司
河南猎农互联网科技有限公司
北京市互联网新科技
皮皮虾互联网科技有限公司
互联网科技接地气
广州三三互联网科技有限公司