我如何在 SQL Server 2008 中反转 integer/non-integer 值
How can i reverse integer/non-integer value in SQL Server 2008
我有以下整数值:
50326518
现在我想将它转换成反向但我想要输出像:
18653250
我使用了 reverse()
函数,但它 returns 81562305,但我想要像 18653250
这样的输出
我该怎么做?
有时值可以像这样F4180000
免责声明:我希望以下内容适用于您的 2008 版本。我不确定是否支持给定 hexstring 的 convert()
样式。我是2014年的,如果还不行,我会删除或编辑答案,请相应评论。
因为它是一个十六进制字符串,并且您想要实际反转字节顺序,您可以 convert()
将它变成 varbinary
并在其上使用 reverse()
。这将逐字节反转它。 convert()
最后回到varchar
。
SELECT convert(varchar(max), convert(varbinary(max), reverse(convert(varbinary(max), '50326518', 2))), 2)
打印:
18653250
请注意,出于某种原因,我不得不再次显式 convert()
reverse()
的 return 值,否则似乎会发生某些隐式转换为 varchar
的情况。所以这是故意的。
也许还可以考虑将数据存储为 binary
或 int
。否则很难执行合理的数据(我可以在字符串中插入各种有趣的东西,根本不是十六进制。)
我会简单地做:
select (right(col, 2) + substring(col, 5, 2) + substring(col, 3, 2) + left(col, 2)) as byte_reversed
我有以下整数值:
50326518
现在我想将它转换成反向但我想要输出像:
18653250
我使用了 reverse()
函数,但它 returns 81562305,但我想要像 18653250
我该怎么做?
有时值可以像这样F4180000
免责声明:我希望以下内容适用于您的 2008 版本。我不确定是否支持给定 hexstring 的 convert()
样式。我是2014年的,如果还不行,我会删除或编辑答案,请相应评论。
因为它是一个十六进制字符串,并且您想要实际反转字节顺序,您可以 convert()
将它变成 varbinary
并在其上使用 reverse()
。这将逐字节反转它。 convert()
最后回到varchar
。
SELECT convert(varchar(max), convert(varbinary(max), reverse(convert(varbinary(max), '50326518', 2))), 2)
打印:
18653250
请注意,出于某种原因,我不得不再次显式 convert()
reverse()
的 return 值,否则似乎会发生某些隐式转换为 varchar
的情况。所以这是故意的。
也许还可以考虑将数据存储为 binary
或 int
。否则很难执行合理的数据(我可以在字符串中插入各种有趣的东西,根本不是十六进制。)
我会简单地做:
select (right(col, 2) + substring(col, 5, 2) + substring(col, 3, 2) + left(col, 2)) as byte_reversed