SQL Server 中数据类型怎么实现隐式转换
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示: CREATE TABLE TES
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
阿里巴巴网络技术招聘信息
网络安全 专升本
使用数据库必须用jdbc吗
网络安全动画宣传短片怎么做
数据库服务启动过然后又停止了
拆除服务器导轨
java游戏服务器端
常见的网络安全技术不包括
服务器集成环境有哪些
mc中国版电脑版好玩的服务器
怎么把数据库迁移到云南
科技互联网设计
网络技术专业职业岗位职责
国家网络安全宣传 校园
软件开发进程记录
网络安全教育的工作要点
软件开发指导性标准
数据库bzgzzd
什么牌子服务器机箱好
网络安全近10年的相关书籍
锐思工业企业数据库怎么用
软件开发是工资多么
tbl服务器备份设计
自学网络安全知乎
怎么测试视频类软件开发
崇左林怀网络技术有限公司
安卓软件开发学什么软件
海外服务器免费帮搭建
证监会网络安全应急预案
网盘服务器源码