2016-09-24 57 views
0

我在我的sql表中有不同种类的条形码。从数字中删除所有开始的0

我从0开始例如

05212365489787 
0000000290098 
0000000000103 

条形码我想从我的条码删除所有0开始。

结果举例想:

5212365489787 
290098 
103 

我发现这个代码:但我想更新它们:

select SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col)) from table1 

类似的东西

update table1 set Barcode =(SELECT SUBSTRING(Barcode, PATINDEX('%[^0 ]%', Barcode + ' '), LEN(Barcode)) FROM table1) 

,但我得到的错误子查询返回了多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

+0

化妆的数据类型为整数,那么所有的0将被自动忽略 – Naruto

+0

究竟只是将数据转换为'INT'或'BIGINT'取决于数据 –

+0

在这种情况下,标记重复中的接受答案将不起作用。 –

回答

1

这是一个简单的修改,以接受答案中标有重复的question

select substring(barcode, patindex('%[^0]%', barcode), 
       len(barcode)) 

接受的答案有le 10的十分之一,这对这个问题是特别不正确的。

我会注意,由于条形码是有限长度的,你也可以转换为十进制

select cast(barcode as decimal(38, 0)) 
1

只是CAST/CONVERT数据到INTBIGINT取决于数据,所有的前导零将通过这样去除。由于前导零的数值,这意味着减少,所以当你convert的数据INTBIGINT前导零将被删除

Select cast(Barcodes as BIGINT) as result 
From yourtable 

更新:

Update Yourtable 
    SET Barcodes = cast(Barcodes as BIGINT) 
Where Left(Barcodes,1) = '0' 
相关问题