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 值进行比较,而且基本数据类型属于相同的数据类型系列时,则在层次结构图中基本数据类型较低的值先隐式转换为其他数据类型,然后再进行比较。

  • 在比较 charvarcharncharnvarchar 数据类型的 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值