我有一个 SQL Server Compact (3.5) 数据库,其中有一个 nvarchar
列,其中包含大量类似于 000000000011070876
的数据。我正在尝试使用 CONVERT
函数将该数据复制到另一 BIGINT
列。
我的第一次尝试是:
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 实现的问题,还是我没有注意到的其他问题?关于如何解决这个问题有什么想法吗?
最佳答案
我最终解决了这个问题:
UPDATE Mobile_Reservation
SET SAPNo = CONVERT(BIGINT, REPLACE(LTRIM(REPLACE(ItemNumber, '0', ' ')), ' ', '0'))
不是最好的解决方案,但它有效。
关于sql-server - 在 SQL Server CE 中从带前导零的字符串转换为 bigint 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745902/