首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Server中,从带前导零的字符串转换为bigint不起作用

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

Stack Overflow用户
提问于 2014-11-04 22:02:56
回答 2查看 1.4K关注 0票数 2

我有一个SQLServerCompact3.5数据库,其中有一个nvarchar列,其中有许多类似于000000000011070876的数据。我试图使用BIGINT函数将数据复制到另一列,即CONVERT

我的第一次尝试是:

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, ItemNumber)

如果我在Server 2008 R2中运行此查询,它就能正常工作。000000000011070876变成11070876。不幸的是,在Server中,它变成0。显然它不能处理前导零。但是它会把000000004000010576变成40,我以为这意味着它只看前10位数。然后我试着:

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, SUBSTRING(ItemNumber, 8, 10))

当开始索引为8时,我假设它会在4开始之前开始(头8位数总是0,但可能超过8 0)。这样做的效果要好一些,但没有成功。000000000011070876为1107,000000004000010576为40000105。

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

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, '4000010576')

这件事做得很好,让我更加困惑。我尝试了几个不同的字符串组合,它所使用的逻辑似乎是:对于字符串中的每一个前导0,另一端的一个字符被移除。'1234‘变成1234,'01234’变成123。但是这不是一个严格的快速规则,因为04000010576变成了40000105,这意味着单前导0从结尾移除两位数.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-05 00:15:56

我最终解决了这个问题:

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation 
SET SAPNo = CONVERT(BIGINT, REPLACE(LTRIM(REPLACE(ItemNumber, '0', ' ')), ' ', '0')) 

这不是最好的解决办法,但有效。

票数 2
EN

Stack Overflow用户

发布于 2014-11-04 22:38:00

在bigint和nvarchar()之间有一个隐式的转换--尝试一下怎么样?

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation SET SAPNo = ItemNumber

如果不是那样的话,那么有时你也可以像

代码语言:javascript
运行
复制
UPDATE Mobile_Reservation SET SAPNo = 0 + ItemNumber

很抱歉,我没有测试SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26745902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档