SQL SERVER中的Reverse函数
reverse返回字符串值的逆向值。如果其他类型使用reverse函数,系统会先转换成字符类型然后再使用reverse函数。下面举几个例子:
1. varchar类型
DECLARE @myvar varchar(10)
SET @myvar = 'sdrawkcaB'
SELECT REVERSE(@myvar) AS Reversed ;
GO
--结果
Backwards
2. int类型
DECLARE @i int
SET @i = 123450
SELECT REVERSE(@i) AS Reversed ;
GO
--结果
054321
其实从这个结果,可以很明显看出先转换成字符串然后再逆向的。
3. 二进制
使用二进制时,发生点小意外:
declare @b varbinary(100)
set @b = 0x7788
select convert(varbinary(100), reverse(@b))
GO
--结果
0x77
按理说,返回结果应该是0x8877,怎么回事呢?原来问题出在二进制向字符串转换上。我的数据库的字符串排序规则是Chinese_PRC_CI_AS,在这种排序规则下0x88是不能转换的,所以0x88丢了。知道原因后,再用进行下面的测试,结果就正确了。
DECLARE @TAB table(col1 varchar(100) COLLATE Latin1_General_BIN,
col2 varchar(100))
insert into @tab
values(0x7788, 0x7788)
select convert(varbinary(100), col1),
convert(varbinary(100), col2),
convert(varbinary(100),reverse(col1)),
convert(varbinary(100),reverse(col2))
from @tab
GO
--结果
0x7788 0x77 0x8877 0x77
参考文献
1. http://msdn.microsoft.com/zh-cn/library/ms180040.aspx