我有一个带有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
的问题,还是其他我没有注意到的问题?关于如何解决这个问题的任何想法?
答案 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来测试。