在SQL Server CE中,从带有前导零的字符串转换为bigint不起作用

时间:2014-11-04 22:02:57

标签: sql-server sql-server-ce

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

我的第一次尝试是:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, ItemNumber)

如果我在SQL Server 2008 R2中运行此查询,它可以正常工作。 000000000011070876变为11070876。不幸的是,在SQL Server CE中,它变为0.显然它无法处理前导零。但它会将000000004000010576变成40,我认为这只是看前10位数。然后我试了一下:

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, SUBSTRING(ItemNumber, 8, 10))

如果起始索引为8,我认为它将在4之前开始(前8位始终为0,但可能超过8 0)。这工作得更好,但没有成功。 000000000011070876成为1107,000000004000010576成为40000105。

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

UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, '4000010576')

这很好用,让我更加困惑。我尝试了几种不同的字符串组合,它似乎使用的逻辑是:对于字符串中的每个前导0,来自另一端的字符被删除。 '1234'变为1234,但'01234'变为123.但它不是一个快硬的规则,因为04000010576变为40000105,这意味着单个前导0从末尾移除两位数...

这是SQL Server CE实现CONVERT的问题,还是其他我没有注意到的问题?关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

我最终解决了这个问题:

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

不是最好的解决方案,但它确实有效。

答案 1 :(得分:0)

bigint和nvarchar()之间存在隐式转换 - 只需尝试

即可
UPDATE Mobile_Reservation SET SAPNo = ItemNumber

如果不是这样,那么有时候你也可以使用像

这样的东西
UPDATE Mobile_Reservation SET SAPNo = 0 + ItemNumber

对不起,我没有SQL CE来测试。