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

【转】SQL Server sql_variant 类型的比较的更多相关文章

  1. SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理

    原文:SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理 SQL Server 字段类型 decimal(18,6)小数点前是几位? 不可否认,这是 ...

  2. SQL Server锁类型

    SQL Server锁类型(SQL)收藏 1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁. 2. NOLOCK:不添加共享锁和排它锁,当这个选项生 ...

  3. MS SQL server对象类型type

    执行下面代码,将获取ms sql server对象类型以及其说明 IF OBJECT_ID('tempdb.dbo.#type') IS NOT NULL DROP TABLE #type CREAT ...

  4. SQL Server时间类型datetime

    SQL Server时间类型datetime 兼容ADO的COleDateTime. SQL datetime 日期和时间数据,可表示1753.1.1 至 9999.12.31的时间,精度为1/300 ...

  5. SQL Server 方言类型映射问题

    关于SQL Server的类型映射问题,例如,nvarchar无法进行hibernate类型映射,需要通过convert进行类型转换方可进行获取

  6. sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...

  7. SQL Server页类型汇总+疑问

    该文章整理自:http://www.sqlnotes.info/2011/10/31/page-type/ SQL Server中包含多种不同类型的页,来满足数据存储的需求.不管是什么类型的页,它们的 ...

  8. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

  9. 【转】SQL SERVER DateTime类型的精度

    先看下边的SQL 语句 CREATE TABLE #DateTest( Id INT, SampleDate DATETIME ) INSERT INTO #DateTest VALUES(1,'1 ...

随机推荐

  1. Harris角点(转载)

    1. 不同类型的角点 在现实世界中,角点对应于物体的拐角,道路的十字路口.丁字路口等.从图像分析的角度来定义角点可以有以下两种定义: 角点可以是两个边缘的角点: 角点是邻域内具有两个主方向的特征点: ...

  2. 343. Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  3. jq中的三元运算结构

    三元运算的结构为:Boolean?值1:值2.它的第一个参数必须为布尔值.

  4. 使用四种框架分别实现百万websocket常连接的服务器

    著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的**,单机1万还是一个非常值 ...

  5. acess the C\c++ from the Java

    https://en.wikipedia.org/wiki/Java_Native_Interface http://docs.oracle.com/javase/7/docs/technotes/g ...

  6. tomcat集群待整理

    对于tomcat的集群有两种方式,这个主要是针对 session而言的.一种就是sticky模式,即黏性会话模式:另外一种就是session复制模式了.所谓sticky模式就是说同一个用户的访问 请求 ...

  7. AR、美颜、机器人:计算机视觉库几乎无所不在

    最近日本推出的反美颜应用Primo可能让感到不胜惶恐.其实,这样反人类的应用,你也能写出,不过必须了解的一些技术,就是计算机视觉.目前,计算机视觉库包括FastCV.OpenCV.JavaCV等. 相 ...

  8. java_list,set,map集合

    一.集合定义 集合就是讲诺干用途相同.近似的“数据”结合成一个整体 集合从体系上分为三种 1.列表(List):List集合区分元素的顺序,允许包含相同的元素 2.集(set):Set集合不区分元素的 ...

  9. openpgp和gnupg

    http://www.openpgp.org/about_openpgp/history.shtml https://www.gnupg.org/ History OpenPGP is a non-p ...

  10. Intent的详细解析以及用法

    Intent的详细解析以及用法      Android的四大组件分别为Activity .Service.BroadcastReceiver(广播接收器).ContentProvider(内容提供者 ...