• 【转】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

  • 相关阅读:
    文本框模糊匹配(纯html+jquery简单实现)
    ajax 基础2
    ajax 基础
    Js 实战3(实现全选)
    JS 实战2(邮箱选人功能)
    JS 实战1(添加、删除)
    Js 图片轮播渐隐效果
    Js 手风琴效果
    树上莫队
    洛谷 3676
  • 原文地址:https://www.cnblogs.com/gates/p/4149255.html
Copyright © 2020-2023  润新知