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

标签 sql-server sql-server-ce

我有一个 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/

相关文章:

asp.net - .NET 中社交网站的框架/起点?

sql-server - "Invalid use of a side-effecting operator ' OPEN SYMMETRIC KEY 打开对称 key 时出现 ' within a function."错误

sql - 如何在不影响原始数据库的情况下将现有备份从现有数据库还原到新数据库?

NHibernate nvarchar/ntext 截断问题

.net - 使用 SqlBulkCopy 在不同来源之间传输数据

sql-server - 从 Management Studio 隐藏 SQL 数据库

sql-server - SQL Server : check whether a Trigger is Enabled or Disabled?

c# - 为什么 SQL Server Compact 中的日期时间类型会对值进行舍入?

c# - 如何在 .NET Core 中使用 .sdf 文件

c# - 如果未安装 SQL Server 2005,我能否创建并连接到 SQL Server CE 数据库?