Sql server 在SQL Server CE isn'中,从带前导零的字符串转换为bigint;行不通

Sql server 在SQL Server CE isn'中,从带前导零的字符串转换为bigint;行不通,sql-server,sql-server-ce,Sql Server,Sql Server Ce,我有一个SQL Server Compact(3.5)数据库,它有一个nvarchar列,其中包含大量看起来像0000000000 11070876的数据。我正在尝试使用CONVERT函数将该数据复制到另一列,该列是BIGINT 我的第一次尝试是: UPDATE Mobile_Reservation SET SAPNo = CONVERT(BIGINT, ItemNumber) 如果我在SQLServer2008R2中运行此查询,它可以正常工作0000000000 11070876变为110

我有一个SQL Server Compact(3.5)数据库,它有一个
nvarchar
列,其中包含大量看起来像
0000000000 11070876
的数据。我正在尝试使用
CONVERT
函数将该数据复制到另一列,该列是
BIGINT

我的第一次尝试是:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, ItemNumber)
如果我在SQLServer2008R2中运行此查询,它可以正常工作<代码>0000000000 11070876变为
11070876
。不幸的是,在SQL Server CE中,它变成了0。显然,它无法处理前导零。但它将把
00000000 4000010576
变成40,我认为这意味着它只看前10位数字。然后我试着:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, SUBSTRING(ItemNumber, 8, 10))
如果开始索引为8,我假设它将在4之前开始(前8位始终为0,但可能大于8 0)。这种方法效果稍好一些,但并不成功<代码>0000000000 11070876变成1107,
00000000 4000010576
变成40000105

然后我尝试了硬编码字符串:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, '4000010576')
这很好,这让我更加困惑。我尝试了几种不同的字符串组合,它似乎使用的逻辑是:对于字符串中的每一个前导0,另一端的一个字符被删除“1234”变为1234,但“01234”变为123。但这不是一个硬性规定,因为0400010576变为40000105,这意味着单前导0从末尾删除了两个数字


这是SQLServerCE实现的
CONVERT
的问题,还是我没有注意到的其他问题?关于如何解决这个问题,有什么想法吗?

在bigint和nvarchar()之间有一个隐式转换——试一试怎么样

UPDATE Mobile_Reservation SET SAPNo = ItemNumber
如果不是这样的话,那么有时候你也可以做一些类似的事情

UPDATE Mobile_Reservation SET SAPNo = 0 + ItemNumber

很抱歉,我没有要测试的SQL CE

我用以下方法解决了这个问题:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, REPLACE(LTRIM(REPLACE(ItemNumber, '0', ' ')), ' ', '0')) 

这不是最好的解决方案,但它很有效。

我在中注意到,nvarchar上的convert最多可以设置30个字符。这种情况与您观察到的每一个左填充0从右切掉一个字符的情况相矛盾——nvarchar字段的大小是多少?只有18岁吗?或者更大的。文档中提到nchar字段可以填充到其定义的长度——这是一件很奇怪的事情——但我想知道是否有一些幕后操纵把你搞砸了。@Greenspark这当然是个好主意,幕后肯定发生了一些奇怪的事情。。如果我有时间,我可能会看看SQL CE库,看看实际的转换函数是如何处理的。。比完整的SQL Server更好。隐式转换以同样的方式失败