zoukankan      html  css  js  c++  java
  • 【转】SQL Server sql_variant 类型的比较

    sql_variant 类型用于存储SQL SERVER中支持的各种数据类型。

    为了进行 sql_variant 比较,SQL Server 数据类型层次结构顺序划分为多个数据类型系,sql_variant 数据类型在用于转换的数据类型层次结构列表中位于顶部。

    数据类型层次结构

    数据类型系列

    sql_variant

    sql_variant

    datetime2

    日期和时间

    datetimeoffset

    日期和时间

    datetime

    日期和时间

    smalldatetime

    日期和时间

    date

    日期和时间

    time

    日期和时间

    float

    近似数值

    real

    近似数值

    decimal

    精确数值

    money

    精确数值

    smallmoney

    精确数值

    bigint

    精确数值

    int

    精确数值

    smallint

    精确数值

    tinyint

    精确数值

    bit

    精确数值

    nvarchar

    Unicode

    nchar

    Unicode

    varchar

    Unicode

    char

    Unicode

    varbinary

    Binary

    binary

    Binary

    uniqueidentifier

    Uniqueidentifier

    下列规则适用于 sql_variant 比较:

    • 当不同基本数据类型的 sql_variant 值进行比较,而且基本数据类型属于不同的数据类型系列时,则在层次结构图中数据类型系列较高的值被认为在两个值中较大。

    • 当不同基本数据类型的 sql_variant 值进行比较,而且基本数据类型属于相同的数据类型系列时,则在层次结构图中基本数据类型较低的值先隐式转换为其他数据类型,然后再进行比较。

    • 在比较 char、varchar、nchar 或 nvarchar 数据类型的 sql_variant 值时,将首先基于以下条件来比较这些值的排序规则:LCID、LCID 版本、比较标志和排序 ID。其中的每个条件都按所列出的顺序作为整数值进行比较。如果所有这些条件都相等,则将按照排序规则来比较实际的字符串值。

    例如:
    begin
    declare
      @v1 sql_variant = cast ('15.00' as float(53)),
      @v2 sql_variant = cast ('15.00' as decimal(18,4)),
      @v3 sql_variant = cast ('15' as tinyint),
      @v4 sql_variant = cast ('00:00:15.00' as time)
     
    select
      case when @v1 > @v2 
             then 'v1 > v2' 
           when @v2 > @v1 
             then 'v2 > v1' 
           else 'v2 = v1' --
       end,
      case when @v1 > @v3 
             then 'v1 > v3' 
           when @v3 > @v1 
             then 'v3 > v1' 
           else 'v3 = v1' --
       end,
      case when @v2 > @v3 
             then 'v2 > v3' 
           when @v3 > @v2
             then 'v3 > v2' 
           else 'v2 = v3' --
       end,
      case when @v1 > @v4 
             then 'v1 > v4' 
           when @v4 > @v1 
             then 'v4 > v1' --
           else 'v4 = v1' 
       end
    end

    @v1 和@v2比较,因为 @v1的基本类型float属于近似数值系列,@v2的基本类型decimal属于精确数据系列,所以'v1 > v2'

    @v1 和@v3比较,因为@v1的基本类型float属于近似数值系列,@v3的基本类型tinyint属于精确数据系列,所以'v1 > v3'

    @v2和@v3比较,因为@v2的基本类型decimal和@v3的基本类型tinyint同属于精确数据系列,v3隐式转换成decimal类型,所以v2 = v3

    @v1 和@v4比较,因为@v1的基本类型float属于近似数值系列,@v4的基本类型time 属于日期和时间,所以v4 > v1

  • 相关阅读:
    web api中允许跨域访问
    HTTP Error 500.19
    使用SQL语句时应该注意的一些问题
    关于EsayUI中datagrid重复提交后台查询数据的问题
    EF6中使用事务的方法
    jquery中常用的方法和注意点
    在EF中正确的使用事务
    css解决移动端1px边框问题
    判定 JS 数据类型的最佳解决方案
    将伪数组转化为真数组
  • 原文地址:https://www.cnblogs.com/gates/p/4149255.html
Copyright © 2011-2022 走看看