SQL Server sql_variant 类型的比较
2011-11-30 23:28
211 查看
sql_variant 类型用于存储SQL SERVER中支持的各种数据类型。
为了进行 sql_variant 比较,SQL Server 数据类型层次结构顺序划分为多个数据类型系,sql_variant
数据类型在用于转换的数据类型层次结构列表中位于顶部。
下列规则适用于 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_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 值进行比较,而且基本数据类型属于相同的数据类型系列时,则在层次结构图中基本数据类型较低的值先隐式转换为其他数据类型,然后再进行比较。
在比较 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 类型的比较
- SQLServer中的char、varchar、nvarchar、text等类型比较
- SQLServerException: 不支持“variant”数据类型
- SQL Server数据类型
- oracle merge into与sqlserver merge into 比较
- com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此游标类型/并发组合
- Oracle 9i与MS SQL Server 2000之比较连载四:关于Oracle的Sys、System的用户与MS SQL 的master的比较
- Microsoft SQL Server 2005 数据类型 与程序语言数据类型对照
- 【MS SQL Server】SQL Server datetime数据类型设计与优化误区
- 读取SQL Server IMAGE 类型字段生成实体文件
- Oracle Class6-2. PL/SQL 简介(数据类型,逻辑比较,控制结构,错误处理)
- sql学习过程1:sql server数据类型解析
- SQL Server numeric数据类型
- Microsoft.sqlserver.Management.Dmf.PolicyStore的类型初始值(Sql Server 2008弹错误)
- [转]InterBase/FireBird和Microsoft SQL Server技术比较
- Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法
- SQL Server CLR全功略之五---CLR自定义数据类型
- Razor视图引擎布局 Razor视图引擎的基本概念与法语 SQL Server Mobile 和 .NET 数据访问接口之间的数据类型映射 binary 和 varbinary datetime 和 smalldatetime float 和 real
- PL/SQL三种集合类型的比较<收藏>
- SQL查询有关 sql_variant 值的基本数据类型和其他信息