SQL Server 中数据类型怎么实现隐式转换
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示: CREATE TABLE TES
千家信息网最后更新 2025年11月15日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安全错误
数据库的锁怎样保障安全
青岛广九网络技术有限公司
网络安全警示室
长春软件开发荐 官网了解
数据库表添加数据
侠剑江湖服务器
老电脑网络连接正常找不到服务器
有效应用英文数据库成果
服务器 em1
删除数据库描述错误
咨询软件开发专业人士
服务器修复真实经历
软件开发培训机构排行
数据库十二五国家级规划教材
软件开发毕业工资多少
大工作业计算机网络技术
如何导出有限长度数据库数据
敏捷方法进行软件开发
网络安全发展规划与实践心得
制作图书馆数据库的总结
bgp机房服务器租用
多源异构数据库的设计
数据库连接上但是没有数据库
网络安全汪正扬
海康4200级联储服务器
db2数据库查询没反应
网络安全三个结构ISAP
网络安全教育手稿
安全狗服务器版下载
联想服务器加热备盘怎么操作
工业平台软件开发师