mysql sql variant_使用 sql_variant 数据

sql_variant 比较

sql_variant 列可以包含具有几种基本数据类型和排序规则的值,所以当比较 sql_variant 操作数时,要应用一些特殊规则。这些规则适用于各种比较操作,例如:

Transact-SQL 比较运算符

ORDER BY、GROUP BY

索引

MAX 和 MIN 聚合函数

UNION(不包括 ALL)

CASE 表达式

为了进行 sql_variant 比较,SQL Server 数据类型层次结构顺序划分为数据类型系列。sql_variant 系列的优先级最高。

数据类型层次结构

数据类型系列

sql_variant

sql_variant

datetime

日期和时间

smalldatetime

日期和时间

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 或 varchar 数据类型的 sql_variant 值时,将基于以下条件进行计算:LCID、LCID 版本、比较标志和排序 ID。各个条件按所列出的顺序作为整数值进行比较。

应用这些规则在 sql_variant 值之间进行比较与在具有相同基本数据类型的值之间进行比较,它们会产生不同的结果。

操作数 A

操作数 B

非变量比较结果

sql_variant 比较结果

'123' char

111 int

A > B

B > A

50000 int

5E1 float

A > B

B > A

因为不同数据类型系列的值在比较谓词中引用前必须显式转换,所以只有当对 sql_variant 列上的结果集进行排序时才能看出这些规则的效果。下表中的值是有关数据类型优先级规则的示例。

PriKey

VariantCol

1

50.0(基类型 float)

2

5000(基类型 int)

3

'124000'(基类型 char(6))

下表显示以下语句的结果:SELECT * FROM VariantTest ORDER BY VariantCol ASC。

PriKey

VariantCol

3

'124000'(基类型 char(6))

2

5000(基类型 int)

1

50.0(基类型 float)

下表中的值是使用不同的排序规则时排序规则优先级规则的示例。

IntKey

VariantCol

1

qrs (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

2

abc (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

3

qrs (varchar SQL_Latin1_General_CP1_CS_AS)

4

17.5 (decimal)

5

abc (varchar SQL_Latin1_General_CP1_CS_AS)

6

klm (varchar SQL_Latin1_General_CP1_CS_AS)

7

1.2 (decimal)

下表显示了 SELECT * FROM CollateTest ORDER BY VariantCol 语句的结果。下表显示的是组合在一起的确切数字数据类型系列的值和按各自的排序规则中组合的 varchar 值。

IntKey

VariantCol

5

abc (varchar SQL_Latin1_General_CP1_CS_AS)

6

klm (varchar SQL_Latin1_General_CP1_CS_AS)

3

qrs (varchar SQL_Latin1_General_CP1_CS_AS)

2

abc (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

1

qrs (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

7

1.2 (decimal)

4

17.5 (decimal)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值