-1

我有一个 SQL Server 表,列中有数字no

12345670000115 
14245670000116 
58492010000118 

我需要一个1从数字右侧删除一个数字的函数,所以结果必须是这样的:

1234567000015 
1424567000016 
5849201000018 

我找到了一些可以使用charindex()的解决方案substring(),但是我的 SQL 技能很差,所以我真的需要帮助。

谢谢

4

4 回答 4

2

假设这是 varchar 数据,这是实现此目的的简单方法。顺便说一句,我建议您不要使用“否”之类的列名。这是一个保留字,而且非常模棱两可。这是数字还是yes的反义词?如果它是我认为的数字,最好用指示数字是什么来命名列。PartNumber、ItemNumber、CatalogNumber 等等……

LEFT(no, len(no) - 2) + RIGHT(no, 1)
于 2016-02-15T19:40:51.537 回答
0

对于您的特定数据,如果数字适合 BIGINT,一种简单的方法是将它们视为数字:

设置

create table #tmp (
    number VARCHAR(16)
)

insert into #tmp values ('12345670000115'), ('14245670000116'), ('58492010000118')
GO

脚本:

select number, cast( (cast(number AS bigint) - 100) / 100 * 10 + cast(number AS bigint) % 100 as VARCHAR(16))
from  #tmp
GO
于 2016-02-15T19:49:33.293 回答
0

尝试使用此查询:

declare @charToReplace char = '1'
select REVERSE(stuff(REVERSE(no), charindex(@charToReplace, REVERSE(no)), 1, ''))
from table

或者

  declare @charToReplace char = '1'
  declare @tmp_table TABLE (NO varchar(16))
  insert into @tmp_table
  select REVERSE(NO)
  from yourtable

  select REVERSE(stuff(NO, charindex(@charToReplace, NO), 1, ''))
于 2016-02-15T19:37:39.710 回答
0

我解决问题。有一个答案是我删除一个字符 1 并更新整个表。谢谢大家的帮助!

Update myTableName 
set barcode=substring(barcode,1,11)+substring(barcode,13,1) 
where len(barcode)>= 14
于 2016-02-16T14:11:35.500 回答