精华内容
下载资源
问答
  • T-SQL 排序规则优先顺序

    千次阅读 2001-05-03 22:00:00
    排序规则的优先顺序排序规则的优先顺序(也称为排序规则类型强制规则)是赋予一组规则的术语,而这组规则决定: 取值... 排序规则的优先顺序规则只适用于字符串数据类型:char、varchar、text、nchar、nvarchar 和 ntex

    排序规则的优先顺序

    排序规则的优先顺序(也称为排序规则类型强制规则)是赋予一组规则的术语,而这组规则决定:

    1. 取值为字符串的表达式的最终结果的排序规则。

    2. 区分排序规则的运算符所使用的排序规则,这些运算符使用字符串输入但不返回字符串,如 LIKE 和 IN。

    排序规则的优先顺序规则只适用于字符串数据类型:charvarchartextncharnvarcharntext。具有其它数据类型的对象不参加排序规则的评估。

    所有对象的排序规则可归为四类中的一种。每类的名称叫做排序规则标志。

    排序规则标志 对象类型
    强制默认 任何 Transact-SQL 字符串变量、参数、字面值、目录内置函数的输出、或不使用字符串输入但产生字符串输出的内置函数。

    如果在用户定义函数、存储过程或触发器中声明某个对象,则将该对象指派为在其中创建函数、存储过程或触发器的数据库的默认排序规则。如果在批处理中声明该对象,则将其指派为连接所使用的当前数据库的默认排序规则。

    隐性 X 列引用。从为表或视图中的列定义的排序规则得到表达式(由 X 表示)的排序规则。

    即使 CREATE TABLE 或 CREATE VIEW 语句中的 COLLATE 子句给列显式指派了排序规则,该列引用仍归为隐性。

    显式 X 使用表达式中的 COLLATE 子句显式投影到特定排序规则(由 X 表示)的表达式。
    无排序规则 表示表达式的值是两个字符串之间操作的结果,而这两个字符串具有隐性排序规则标志的冲突排序规则。表达式的结果被定义为不具有排序规则。

    只引用一个字符串对象的简单表达式的排序规则标志是被引用对象的排序规则标志。

    如果复杂表达式所引用的两个操作数表达式的排序规则标志相同,则该复杂表达式的排序规则标志为数表达式的排序规则标志。

    如果复杂表达式所引用的两个操作数表达式的排序规则不同,则该复杂表达式最终结果的排序规则标志基于下列规则:

    1. 显式优先于隐性。隐性优先于强制默认。换言之,

      显式 > 隐性 > 强制默认

    2. 组合两个已指派给不同排序规则的显式表达式将生成错误。

      显式 X + 显式 Y = 错误

    3. 组合两个具有不同排序规则的隐性表达式将产生无排序规则。

      隐性 X + 隐性 Y = 无排序规则

    4. 将无排序规则的表达式与任何标志的表达式组合,除了显式排序规则外(参见下一项),都产生无排序规则标志的结果。

      无排序规则 + 任何标志 = 无排序规则

    5. 将无排序规则的表达式与显式排序规则的表达式组合将产生具有显式标志的表达式。

      无排序规则 + 显式 X = 显式

    下面的示例说明上述规则。

    USE tempdb
    GO
    
    CREATE TABLE TestTab (
       id int, 
       GreekCol nvarchar(10) collate greek_ci_as, 
       LatinCol nvarchar(10) collate latin1_general_cs_as
       )
    INSERT TestTab VALUES (1, N'A', N'a')
    GO
    

    下面查询中的谓词具有排序规则冲突,因此产生错误:

    SELECT * 
    FROM TestTab 
    WHERE GreekCol = LatinCol
    

    下面是结果集。

    Msg 446, Level 16, State 9, Server CTSSERV, Line 1
    Cannot resolve collation conflict for equal to operation.
    

    下面查询中的谓词在排序规则 greek_ci_as 中取值,因为右边表达式具有显式标志,优先于右边表达式的隐性标志:

    SELECT * 
    FROM TestTab 
    WHERE GreekCol = LatinCol COLLATE greek_ci_as
    

    下面是结果集。

    id          GreekCol             LatinCol
     ----------- -------------------- --------------------
               1 a                    A
    
    (1 row affected)
    

    下面查询中的 case 表达式没有排序规则标志,所以不能出现在选择列表中,也不能由区分排序规则的运算符操作。不过,这些表达式可由不区分排序规则的运算符操作。

    SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END) 
    FROM TestTab
    

    下面是结果集。

    Msg 451, Level 16, State 1, Line 1
    Cannot resolve collation conflict for column 1 in SELECT statement.
    
    SELECT PATINDEX((CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END), 'a')
    FROM TestTab
    

    下面是结果集。

    Msg 446, Level 16, State 9, Server LEIH2, Line 1
    Cannot resolve collation conflict for patindex operation.
    
    SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END) COLLATE Latin1_General_CI_AS 
    FROM TestTab
    

    下面是结果集。

    --------------------
    a
    
    (1 row affected)
    

    下表汇总了上述规则。

    操作数强制标志
    显式 X

    隐性 X
    强制默认
    无排序规则
    显式 Y 生成错误 结果为显式 Y 结果为显式 Y 结果为显式 Y
    隐性 Y 结果为显式 X 结果为无排序规则 结果为隐性 Y 结果为无排序规则
    强制默认 结果为显式 X 结果为隐性 X 结果为强制默认 结果为无排序规则
    无排序规则 结果为显式 X 结果为无排序规则 结果为无排序规则 结果为无排序规则

    运算符和函数区分排序规则或不区分排序规则:

    1. 区分排序规则表示指定无排序规则操作数是编译时错误。表达式结果不能是无排序规则。

    2. 不区分排序规则表示操作数和结果可以是无排序规则。

    比较运算符以及 MAX、MIN、BETWEEN、LIKE 和 IN 运算符都区分排序规则。运算符所使用的字符串被赋以具有较高优先顺序的操作数的排序规则标志。UNION 运算符也区分排序规则,且所有的字符串操作数和最终结果被赋以具有最高优先顺序的操作数的排序规则。按列评估 UNION 操作数和结果的排序规则优先顺序。

    赋值运算符不区分排序规则,右边的表达式投影到左边的排序规则上。

    字符串串联运算符不区分排序规则,两个字符串操作数和结果被赋以具有最高排序规则优先顺序的操作数的排序规则标志。UNION ALL 和 CASE 运算符不区分排序规则,所有的字符串操作数和最终结果都被赋以具有最高优先顺序的操作数的排序规则标志。按列评估 UNION ALL 操作数和结果的排序规则优先顺序。

    CAST、CONVERT 和 COLLATE 函数区分 charvarchartext 数据类型的排序规则。如果 CAST 和 CONVERT 函数的输入和输出是字符串,则输出字符串具有输入字符串的排序规则标志。如果输入不是字符串,则输出字符串为强制默认并被赋以连接所使用的当前数据库的排序规则,或是包含引用 CAST 或 CONVERT 的用户定义函数、存储过程或触发器的数据库的排序规则。

    对于返回字符串但不使用字符串输入的内置函数,结果字符串为强制默认并被赋以当前数据库的排序规则,或是包含引用该函数的用户定义函数、存储过程或触发器的数据库的排序规则。

    下列函数区分排序规则,其输出字符串具有输入字符串的排序规则标志:

    1. CHARINDEX

    2. DIFFERENCE

    3. ISNUMERIC

    4. LEFT

    5. LEN

    6. LOWER

    7. PATINDEX

    8. REPLACE

    9. REVERSE

    10. RIGHT

    11. SOUNDEX

    12. STUFF

    13. SUBSTRING

    14. UPPER

    下列附加规则也适用于排序规则优先顺序:

    1. 在已经是显式表达式的表达式上不能有多个 COLLATE 子句。例如,下面的 WHERE 子句是不合法的,因为将 COLLATE 子句指定给的表达式已经是显式表达式:
      WHERE ColumnA = ( 'abc' COLLATE French_CI_AS) COLLATE French_CS_AS
      
    2. text 数据类型不允许代码页转换。如果排序规则的代码页不同,不能将文本表达式从一种排序规则投影到另一种排序规则。如果右边文本操作数的排序规则代码页与左边文本操作数不同,则赋值运算符不能赋值。

    在数据类型转换后确定排序规则的优先顺序。产生结果排序规则的操作数可以与提供最终结果数据类型的操作数不同。例如,考察下面的批处理:

    CREATE TABLE TestTab
       (PrimaryKey int PRIMARY KEY,
        CharCol char(10) COLLATE French_CI_AS
       )
    
    SELECT *
    FROM TestTab
    WHERE CharCol LIKE N'abc'
    

    简单表达式 N'abc' 的 Unicode 数据类型具有较高的数据类型优先顺序,所以结果表达式将 Unicode 数据类型指派给 N'abc'。然而,表达式 CharCol 具有隐性排序规则标志,而 N'abc' 具有较低的强制默认排序规则标志,所以使用的排序规则是 CharCol French_CI_AS 排序规则。

    展开全文
  • 1.使用ROWID读取一行数据;2.依据聚簇连接读取一行数据;3.依据Unique HASH Cluster 读取一行数据;4.依据Unique INDEX读取一行数据;5.CLUSTER连接;6.Non Unique HASH Cluster Key;7.Non Unique

    1.使用ROWID读取一行数据;

    2.依据聚簇连接读取一行数据;

    3.依据Unique HASH Cluster 读取一行数据;

    4.依据Unique INDEX读取一行数据;

    5.CLUSTER连接;

    6.Non Unique HASH Cluster Key;

    7.Non Unique Cluster Key;

    8.Non Unique组合索引;

    9.Non Unique单一列索引;

    10.依据索引的范围查询;

    11.依据索引的整体范围查询;

    12.Sort Merge连接;

    13.索引列的MIN、MAX计算;

    14.索引列的ORDER BY;

    15.全表扫描。

    展开全文
  • 数据类型的优先顺序当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回...

    数据类型的优先顺序

    当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。

    下面是 Microsoft® SQL Server™ 2000 数据类型的优先顺序:

    1. sql_variant(最高)

    2. datetime

    3. smalldatetime

    4. float

    5. real

    6. decimal

    7. money

    8. smallmoney

    9. bigint

    10. int

    11. smallint

    12. tinyint

    13. bit

    14. ntext

    15. text

    16. image

    17. timestamp

    18. uniqueidentifier

    19. nvarchar

    20. nchar

    21. varchar

    22. char

    23. varbinary

    24. binary(最低)
    展开全文
  • 当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回错误。当两个操作数...

     

        当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。

    下面是 Microsoft® SQL Server™ 2000 数据类型的优先顺序:

    1. sql_variant(最高)
    2. datetime
    3. smalldatetime
    4. float
    5. real
    6. decimal
    7. money
    8. smallmoney
    9. bigint
    10. int
    11. smallint
    12. tinyint
    13. bit
    14. ntext
    15. text
    16. image
    17. timestamp
    18. uniqueidentifier
    19. nvarchar
    20. nchar
    21. varchar
    22. char
    23. varbinary
    24. binary(最低)
    展开全文
  • 声明冲突的优先顺序

    2019-10-06 20:55:23
    声明冲突的优先顺序,这个虽然很基本,但是也是很重要的东西,往往很多时候出现写了的样式没有效果,十有八九就是声明中的权重问题!我拉通去整理了一下。 一、比较声明的优先级: 由大到小顺序。 1. 用户重要...
  • iptables优先顺序

    万次阅读 2014-05-21 17:37:11
    netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux...
  • 关于STM32中断分组及优先顺序的学习

    千次阅读 2019-02-02 18:15:17
    关于STM32中断分组及优先顺序的学习 最近在搞STM32中断的事情,起因是程序里面有冲突,总是搞不懂优先顺序,查了不少资料,结合实际的程序做了测试,现总结如下: 1、STM32中断的分类 实际就是大家常说的0-4 的分组...
  • nginx的优先匹配规则

    千次阅读 2017-11-24 21:56:27
    nginx的优先匹配规则 以=开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。 ^~ 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配; ~* ...
  • C++中的数据类型的自动转换?哪些和哪些之间是可以自动转换的?...自动转换遵循以下规则: 1.若参与运算量的类型不同,则先转换成同一类型。java中数据类型自动类型转换为什么转换顺序是byte-float所占字节比l...
  • 守着星空守着你And优先于Or所以即使a <=> a1 Or a2WhereaAndb与Wherea1Ora2Andb,因为这将被执行为Wherea1Or(a2Andb)为了使它们保持不变,您想要的是以下内容(使用括号覆盖优先级规则):Where(a1Ora2)Andb这里...
  • nginx location执行顺序和匹配原则根据location的特点分为普通和正则两种,执行顺序和匹配规则的差异也在于此。 执行顺序 nginx会优先执行普通location,不管普通location是否匹配,都会再次转向执行正则location...
  • 二、css优先级 的优先顺序 三、选择器 的 权重及优先规则 四、权重 的4个等级定义 五、权重 的优先顺序 六、利用权重值比较优先级 一、css优先级 的 6大分类 通常可以将css的优先级由高到低分为6组: 第一...
  • R,S构型的确定将与手性碳原子相连的四个基团按顺序规则排列大小,将最小的基团放在离眼睛最远的地方,其它三个基团按由大到小的方向旋转,旋转方向是顺时针的,手性碳为R构型(拉丁文rectus的字首)...
  • 有关高考化学,大块的知识点和题型分析其实已经做的差不多了,后面我们会逐渐更新这些相对比较针对的分析方法。今天正好有位读者来问命名有关内容...这两版规则存在微妙的差异,那么正确答案究竟是以2017版规则还是...
  • 自己回答规则是:对于同名的变量声明,Javascript采用的是忽略原则,后声明的会被忽略,变量声明和赋值操作可以写在一起,但是只有声明会被提升,提升后变量的值默认为undefined,结果是在赋值操作执行前变量的值必...
  • pattern匹配规则一、四种匹配规则1 精确匹配2 路径匹配3 扩展名匹配4 缺省匹配二、匹配顺序三、需要注意的问题1 路径匹配和扩展名匹配无法同时设置2 "/*“和”/"含义并不相同四、举例五、优先顺序五、优先顺序 ...
  • 算符优先顺序4.例子:(重要!)5.公式 (注意第七条,右推左)6.标识符和字母数字例子(3)正规文法和正规式之间的转换1.二者的等价性2.正规式转正规文法规则3.正规式转正规文法例子4.正则文法转正规式规则5.正则文法...
  • CSS执行顺序优先

    2012-05-16 11:03:32
    CSS执行顺序优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。 首先就是CSS规则的specificity(特殊性),CSS...
  • 后续将会更新:立体化学基础(2)--对映体及表示法立体化学基础(3)--构象异构体及其表示法立体化学基础(4)--顺反异构体立体化学基础(5)--Z/E、R/S标记法立体化学基础(6)--系统命名综合命名规则:第一步 选择主官能团。...
  • 文章目录iptables简介iptables基础iptables和netfilter的关系iptables传输数据包的过程iptables的规则表和链表(tables)链(chains)规则表规则链规则表之间的优先顺序规则链之间的优先顺序(分三种情况)第一种...
  • 编号 按最低系列规则.从靠侧链最近端编号,如两端号码相同时,则依次比较下一取代基位次,最先遇到最小位次定为最低系统(不管取代基性质如何).例如,命名为2,3,5-三甲基己烷,不叫2,4,5-三甲基己烷,因2,3,5与2,4,5对比是...
  • 优先权问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。 首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于...
  • 你对CSS规则的执行顺序是否了解,这里和大家分享一下,若两条规则具有相同的权值、起源及特殊性,那在样式表中最后出现的规则优先。 1、CSS规则之特殊性 首先来看一下这个例子将会发生的情形: <style ...
  • CSS执行顺序优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。    首先就是CSS规则的...
  • 那 么这个顺序是怎么得出来的呢?实际上在CSS2规范关于具体性(specificity)的定义中,描述是非常明确的,但是很多中文版本的css图书中采 用了10进制的简单相加计算方式(包括第一版《CSS权威指南》,第二版中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 964
精华内容 385
关键字:

优先顺序规则