我有一个SQLServerCompact3.5数据库,其中有一个nvarchar
列,其中有许多类似于000000000011070876
的数据。我试图使用BIGINT
函数将数据复制到另一列,即CONVERT
。
我的第一次尝试是:
UPDATE Mobile_Reservation
SET SAPNo = CONVERT(BIGINT, ItemNumber)
如果我在Server 2008 R2中运行此查询,它就能正常工作。000000000011070876
变成11070876
。不幸的是,在Server中,它变成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从结尾移除两位数.
这是Server实现CONVERT
的问题,还是我没有注意到的其他问题?对如何解决这个问题有什么想法吗?
发布于 2014-11-04 16:15:56
我最终解决了这个问题:
UPDATE Mobile_Reservation
SET SAPNo = CONVERT(BIGINT, REPLACE(LTRIM(REPLACE(ItemNumber, '0', ' ')), ' ', '0'))
这不是最好的解决办法,但有效。
发布于 2014-11-04 14:38:00
在bigint和nvarchar()之间有一个隐式的转换--尝试一下怎么样?
UPDATE Mobile_Reservation SET SAPNo = ItemNumber
如果不是那样的话,那么有时你也可以像
UPDATE Mobile_Reservation SET SAPNo = 0 + ItemNumber
很抱歉,我没有测试SQL。
https://stackoverflow.com/questions/26745902
复制