新葡亰496net 新葡亰496net SQL Server 中的数据类型隐式转换问题

SQL Server 中的数据类型隐式转换问题



当两个不同数据类型的表达式用运算符组合后,优先级较低的数据类型首先转换为优先级较高的数据类型。
如果此转换不是所支持的隐式转换,则返回错误。
对于组合具有相同数据类型的操作数表达式的运算符时,运算的结果便为该数据类型

    3.LIKE,判断字符串是否满足指定的格式,例如,查询名字姓氏为黄的员工(where
name like ‘黄%’)。

以上所述是小编给大家介绍的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;

    精度的意思是数值中有多少位数,小数位指小数点精确到几位,小数位的位数包含在精度里,故指定数据类型的小数位必须小于小于指定的精度。

参考资料:

  SQL Server中有一些关键字可以替代谓词语义的含义,也可以称为SQL
Server中的谓词。

总结

 

而我们知道,DecimalNUMERIC
是同义词,可互换使用,而官方文档“数据类型优先级
(Transact-SQL)”中,Decimal的优先级明显高于INT,如果真要按照原理来解释,应该是INT转换NUMERIC才对,所以越想越糊涂,只知道有这么一回事,但是真正的Root Cause尚不清楚,而且在精确度要求较高的报表中,这种现象就会类似Bug一样的突然出现。需要谨慎留心!

   由于运算符数量不小,死记硬背下来要花点功夫。分析规律我们可以以类型来制定顺序,记住个大概:(圆括号)>算术运算符>比较运算符>逻辑运算符。

如上所示,为什么99.1 + SUM(GOOD_WEIGHT)变成100了呢?
原始SQL非常复杂,我们分析、排除掉各个因素后,始终不得要领,各种折腾中发现,如果这样转换一下,居然就OK了,后面分析了一下,应该是CASE
WHEN里面的不同数据类型导致隐式转换,说实话之前还真没有留意CASE
WHEN中存在数据类型的隐性转换,但是为什么就一定从NUMERIC转换为INT了呢?
而不是INT隐性转换为NUMERIC呢,
说实话没有看到相关文档的官方,如果按照官方文档:

  

写这篇文章的时候,还真不知道如何取名,也不知道这个该如何将其归类。这个是同事遇到的一个案例,案例比较复杂,这里抽丝剥茧,仅仅构造一个简单的案例来展现一下这个问题。我们先构造测试数据,如下所示:

    2.谓词中使用比较运算符,如某个属性值大于或小于某指定个值。

 

=(等于) 等于
>(大于) 大于
<(小于) 小于
>=(大于或等于) 大于或等于
<=(小于或等于) 小于或等于
<>(不等于) 不等于
!=(不等于) 不等于(非 ISO 标准)
!<(不小于) 不小于(非 ISO 标准)
!>(不大于) 不大于(非 ISO 标准)

  

一、浅谈谓词

  2.数值数据的精度和小数位:

四、运算符优先级

  谓词的概念:一个运算结果为True、False或Unknown的逻辑表达式。它的运用范围有:where子句、Having子句、Check约束、联接查询的联接条件等。

    

    图片 1

 

 

 

二、运算符

    1.IN,在…之内,检查一个值是否存在于指定的集合内。     

      在查阅后可以发现一个规律,就是在同一特定的范围内,数据容量大的数据类型优先级大于数据容量小的数据类型。例如int和decimal后者的精度长度大于int,

级别 运算符
1 ()圆括号
2 *(乘)、/(除)、%(取模)
3 +(正)、-(负)、+(加)、+(串联)、-(减)、&(位与)、^(位异或)、|(位或)
4 =、>、<、>=、<=、<>、!=、!>、!<(比较运算符)
5 NOT
6 AND
7 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8 =(赋值)

    1.通过逻辑运算符连接多个谓词(逻辑表达式),如使用AND和OR。

    Numeric(2,1)数据类型的含义:数值一共占2位,其中小数占一位

    

  谓词和运算符的相互使用:

   谓词和运算符配合使用是我们得到理想数据的最佳途径。

    4.SQL Server数据类型优先级顺序:

     在SQL Server中运算符分为标准和非标准,如 “!=” 可用 “<>”
替代,建议使用标准的运算符。

标签:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图