我将我的long值保存在SQL Server表中作为varbinary(max)

var savedValue = BitConverter.GetBytes(longValue);

现在我需要在T-SQL查询中使用该值,但是当我尝试获取值时:

select cast(Value as bigint) from dbo.MyValues

它返回不同的数值。 例如,如果我在.NET中保存-8588797048854775808 ,在T-SQL中我得到33802181122903688

请告诉我这是什么问题? 有问题可以解决吗?

===============>>#1 票数:12 已采纳

varbinarybigint (以及back)的转换使用网络字节顺序(big-endian)。 BitConverter使用运行它的机器的endian-ness(x86和x64的little-endian)。

因此BitConverter.GetBytes上-8588797048854775808(0x88CE7696E7167800)是{0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}运行,并且cast在{0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}是0x0088E91869893177 = 38536887891734903。

显而易见的事情是首先将64位整数存储为64位整数。

如果你真的需要进行这种转换,那么:

var savedValue = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(longValue))

将交换字节,同时也是可移植的,如果在big-endian机器上运行它将不会交换字节。

或者,如果由于某种原因不想使用System.Net命名空间,或者如果要扩展到三个IPAddress.HostToNetworkOrder handeles以外的类型,请使用:

var savedValue = BitConverter.GetBytes(longValue);
if(BitConverter.IsLittleEndian)
  Array.Reverse(savedValue);

  ask by Maybe translate from so

未解决问题?本站智能推荐:

1回复

T-SQL:将NTEXT转换为VARCHAR为INT / BIGINT [复制]

这个问题在这里已有答案: SQL Server 2008:将数据类型nvarchar转换为float 3答案时 出错 我有一个表格,其中包含NTEXT类型的字段,它存储了许多类型的值,其中包含文件大小。 我正在尝试在记录列表上运行查询并添加文件大小,但我遇到了这个
4回复

如何在T-SQL中指定BIGINT文字?

除了在CONVERT函数中包装我的文字之外,有没有办法指定我想要例如12345表示为BIGINT而不是INT? 在C#中,我可以指定12345L,但我不知道T-SQL中的等效功能。
1回复

将数据类型varchar转换为存储过程中的bigint时出错

我正在尝试使用usp_TimesheetsAuditsLoadAllbyId 42747, NULL命令调用此过程。 但我总是得到一个错误 Msg 8114,Level 16,State 5,Procedure usp_TimesheetsAuditsLoadAllById,Li
1回复

使用T-SQL将单个字节从VARCHAR转换/串联到BIGINT

在两个数据库系统之间工作时,我需要将VARCHAR标识符转换为BIGINT。 我的VARCHAR始终采用“ ###-XXX-XXX-###”的形式,其中#是任何数字,X是任何字母数字字符(例如“ 103-AF7-GGB-005”)。 保证两个###条目都低于256,因此我想将每个条目存储在B
1回复

在bigint id上的T-SQL LEFT JOIN仅返回右表上小于101的id

我在Sql Server 2008上有两个表。具有3个字段的ownership和具有其他3个字段的case ,我需要在ID字段(bigint)上同时加入这两个表。 为了进行测试,我只使用每个表中的一个字段。 此字段是bigint,值范围是1到170(目前)。 我的查询是:
2回复

将Bigint转换为Datetime SQL Server

我有一个表,其中包含字段Report_Date。 此字段是bigint类型。 我有另一个表具有datetime类型的ReportDate。 我想合并每个表中的数据,但我想将bigint转换为日期时间。 我尝试了SELECT DATEADD(DD, convert(bigint, Re
1回复

在SQL Server中转换bigint纪元

在Azure数据仓库中将Unix纪元时间戳转换为正常日期时间时遇到麻烦: 错误: 将表达式转换为数据类型int的算术溢出错误。 值2551564800等于09/11/2050。 任何帮助将不胜感激
2回复

bigint类型与用法

我第一次在sql存储过程中使用' & '符号。 有人可以解释一下结果是2吗? 仅供参考:在SQL Server 2005上
2回复

铸造varchar浮动到bigint

我试图将varchar转换为bigint。 然后将其插入到int列中。 我发现我没有得到期望的价值。 然后,我尝试了以下语句: 结果: 我无法理解为什么会出现这种差异。 但是,当我将值更改为0000029.33 ,结果没有差异。 我被困住了,不知道为什么会这样。
1回复

在SQL Server上将日期存储为BigInt-这是一个好主意吗?

好,现在让我举一个例子 日期: 15.12.2012 00:16:39 现在,它将存储为 现在,例如,如果我想检索比30分钟(30 * 60 = 1800秒)长的行 我可以做 那么这将是一种表演方式,而不是存储为日期时间吗?