mssql去除字符串中的指定一位数

时间:2021-06-07 17:45:37
表中有个字段内容为:180510001,180510002,180510003,以此类推

我要实现将180510001去除,变更为18050001

也就是去除第五位数的1,这条语句应该怎么写?

用substring看了好久没看懂

求各位大神讲解

感谢

5 个解决方案

#1


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] int)
Insert #T
select 180510001 union all
select 180510002 union all
select 180510003
Go
--测试数据结束
Select LEFT(col,4)+RIGHT(col,4)  AS col FROM #T


mssql去除字符串中的指定一位数

#2



-- 使用 stuff 更为合适
create table test(name varchar(30))
go
insert into test values('180510001'),('180510002'),('180510003')
go
select name, stuff(name,5,1,'') new_name from test 
go
drop table test 
go

(3 行受影响)
name                           new_name
------------------------------ ------------------------------
180510001                      18050001
180510002                      18050002
180510003                      18050003

(3 行受影响)


#3


如果就是要用substring,语句如下:
select SUBSTRING('180510001', 1, 4)+SUBSTRING('180510001', 6, 4)

原理如下,第二行是数字的顺序。所要的结果,就是从第1个数字开始,取4个数字,加上从第6个数字开始,取4个数字。
1805 1 0001
1234 5 6789

#5


引用 2楼卖水果的net 的回复:

-- 使用 stuff 更为合适
create table test(name varchar(30))
go
insert into test values('180510001'),('180510002'),('180510003')
go
select name, stuff(name,5,1,'') new_name from test 
go
drop table test 
go

(3 行受影响)
name                           new_name
------------------------------ ------------------------------
180510001                      18050001
180510002                      18050002
180510003                      18050003

(3 行受影响)


那用update应该怎么写呢?就是把字段的所有值都批量更改

#1


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] int)
Insert #T
select 180510001 union all
select 180510002 union all
select 180510003
Go
--测试数据结束
Select LEFT(col,4)+RIGHT(col,4)  AS col FROM #T


mssql去除字符串中的指定一位数

#2



-- 使用 stuff 更为合适
create table test(name varchar(30))
go
insert into test values('180510001'),('180510002'),('180510003')
go
select name, stuff(name,5,1,'') new_name from test 
go
drop table test 
go

(3 行受影响)
name                           new_name
------------------------------ ------------------------------
180510001                      18050001
180510002                      18050002
180510003                      18050003

(3 行受影响)


#3


如果就是要用substring,语句如下:
select SUBSTRING('180510001', 1, 4)+SUBSTRING('180510001', 6, 4)

原理如下,第二行是数字的顺序。所要的结果,就是从第1个数字开始,取4个数字,加上从第6个数字开始,取4个数字。
1805 1 0001
1234 5 6789

#4


#5


引用 2楼卖水果的net 的回复:

-- 使用 stuff 更为合适
create table test(name varchar(30))
go
insert into test values('180510001'),('180510002'),('180510003')
go
select name, stuff(name,5,1,'') new_name from test 
go
drop table test 
go

(3 行受影响)
name                           new_name
------------------------------ ------------------------------
180510001                      18050001
180510002                      18050002
180510003                      18050003

(3 行受影响)


那用update应该怎么写呢?就是把字段的所有值都批量更改