我有一个 SQL Server 表,列中有数字no
:
12345670000115
14245670000116
58492010000118
我需要一个1
从数字右侧删除一个数字的函数,所以结果必须是这样的:
1234567000015
1424567000016
5849201000018
我找到了一些可以使用charindex()
的解决方案substring()
,但是我的 SQL 技能很差,所以我真的需要帮助。
谢谢
我有一个 SQL Server 表,列中有数字no
:
12345670000115
14245670000116
58492010000118
我需要一个1
从数字右侧删除一个数字的函数,所以结果必须是这样的:
1234567000015
1424567000016
5849201000018
我找到了一些可以使用charindex()
的解决方案substring()
,但是我的 SQL 技能很差,所以我真的需要帮助。
谢谢
假设这是 varchar 数据,这是实现此目的的简单方法。顺便说一句,我建议您不要使用“否”之类的列名。这是一个保留字,而且非常模棱两可。这是数字还是yes的反义词?如果它是我认为的数字,最好用指示数字是什么来命名列。PartNumber、ItemNumber、CatalogNumber 等等……
LEFT(no, len(no) - 2) + RIGHT(no, 1)
对于您的特定数据,如果数字适合 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
尝试使用此查询:
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, ''))
我解决问题。有一个答案是我删除一个字符 1 并更新整个表。谢谢大家的帮助!
Update myTableName
set barcode=substring(barcode,1,11)+substring(barcode,13,1)
where len(barcode)>= 14