结你参考,先去掉逗号和数字。可以写成函数方便处理。 ------------------------------- declare @y varchar(50) set @Y='Belize City 4561,461' set @y=replace(@Y,',','') BEGIN WHILE PATINDEX('%[^A-Za-z]%',@y)>0 begin SET @y=STUFF(@y,PATINDEX('%[^A-Za-z]%',@y),1,'') end print @y END ------------------------------------ 结果 BelizeCity
Belize City 61,461 San, Ignacio 16,812 Orange Walk 15,298 Belmopan 13,381 Dangriga 10,750 这个给的数据很容易有歧义。 这样我可以转换成不删除数字。而是删除第一个数字后面的所有字符(包括这个数字)
从第一位数字开始的都去掉 declare @y varchar(50) declare @I varchar(50) set @Y='San, Ignacio 16,812' set @I=@Y BEGIN WHILE PATINDEX('%[^0-9]%',@y)>0 begin SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'') end set @y=LEFT(@y,1) set @I=left (@i,charindex(@y,@I)-1) print @i END
曾经想过用 update Cities_AllCities set CityName=replace(CityName,'1','') update Cities_AllCities set CityName=replace(CityName,'2','') update Cities_AllCities set CityName=replace(CityName,'3','') update Cities_AllCities set CityName=replace(CityName,'4','') .。 -- 不妨 再增加一倍的工作量,你先替换'1,' ,这样数量中间的“,” 就都没有了,再去替换0-9。 -- 由原来的替换 10 次,变成 替换 20 次。 update Cities_AllCities set CityName=replace(CityName,'1','') update Cities_AllCities set CityName=replace(CityName,'1,','')
-- 写反了,先替掉 "1, ",再替掉 "1" update Cities_AllCities set CityName=replace(CityName,'1,','') update Cities_AllCities set CityName=replace(CityName,'1','')
create function dbo.test_fun1(@y nvarchar(100)) returns nvarchar(100) as BEGIN declare @i nvarchar(100) set @I=@Y WHILE PATINDEX('%[^0-9]%',@y)>0 begin SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'') end set @y=LEFT(@y,1) set @I=left (@i,charindex(@y,@I)-1) return @i END -------------------------------------------------------------------------------------------------- ---->测试数据 IF OBJECT_ID('TEMPDB.DBO.#TEMP')IS NOT NULL DROP TABLE #TEMP ------------------------------------------------------------------------------------------------------------ CREATE TABLE #TEMP (test nvarchar(100)) insert into #TEMP select 'Belize City 61,461'union all select 'San, Ignacio 16,812' union all select 'Orange Walk 15,298' union all select 'Belmopan 13,381' union all select 'Dangriga 10,750' go select dbo.test_fun1(test) from #temp ------------------------------------------------------------------ 结果(5 行受影响)---------------------------------------------------------------------------------------------------- Belize City San, Ignacio Orange Walk Belmopan Dangriga
结你参考,先去掉逗号和数字。可以写成函数方便处理。
-------------------------------
declare @y varchar(50)
set @Y='Belize City 4561,461'
set @y=replace(@Y,',','')
BEGIN
WHILE PATINDEX('%[^A-Za-z]%',@y)>0
begin
SET @y=STUFF(@y,PATINDEX('%[^A-Za-z]%',@y),1,'')
end
print @y
END
------------------------------------
结果
BelizeCity
San, Ignacio 16,812 英文中间带逗号
先去掉数字,再去掉最后一位逗号
San, Ignacio 16,812
Orange Walk 15,298
Belmopan 13,381
Dangriga 10,750
这个给的数据很容易有歧义。
这样我可以转换成不删除数字。而是删除第一个数字后面的所有字符(包括这个数字)
从第一位数字开始的都去掉
declare @y varchar(50)
declare @I varchar(50)
set @Y='San, Ignacio 16,812'
set @I=@Y
BEGIN
WHILE PATINDEX('%[^0-9]%',@y)>0
begin
SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'')
end
set @y=LEFT(@y,1)
set @I=left (@i,charindex(@y,@I)-1)
print @i
END
曾经想过用
update Cities_AllCities set CityName=replace(CityName,'1','')
update Cities_AllCities set CityName=replace(CityName,'2','')
update Cities_AllCities set CityName=replace(CityName,'3','')
update Cities_AllCities set CityName=replace(CityName,'4','')
.。
-- 不妨 再增加一倍的工作量,你先替换'1,' ,这样数量中间的“,” 就都没有了,再去替换0-9。
-- 由原来的替换 10 次,变成 替换 20 次。
update Cities_AllCities set CityName=replace(CityName,'1','')
update Cities_AllCities set CityName=replace(CityName,'1,','')
update Cities_AllCities set CityName=replace(CityName,'1,','')
update Cities_AllCities set CityName=replace(CityName,'1','')
create function dbo.test_fun1(@y nvarchar(100))
returns nvarchar(100)
as
BEGIN
declare @i nvarchar(100)
set @I=@Y
WHILE PATINDEX('%[^0-9]%',@y)>0
begin
SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'')
end
set @y=LEFT(@y,1)
set @I=left (@i,charindex(@y,@I)-1)
return @i
END
--------------------------------------------------------------------------------------------------
---->测试数据
IF OBJECT_ID('TEMPDB.DBO.#TEMP')IS NOT NULL
DROP TABLE #TEMP
------------------------------------------------------------------------------------------------------------
CREATE TABLE #TEMP
(test nvarchar(100))
insert into #TEMP
select 'Belize City 61,461'union all
select 'San, Ignacio 16,812' union all
select 'Orange Walk 15,298' union all
select 'Belmopan 13,381' union all
select 'Dangriga 10,750'
go
select dbo.test_fun1(test) from #temp
------------------------------------------------------------------
结果(5 行受影响)----------------------------------------------------------------------------------------------------
Belize City
San, Ignacio
Orange Walk
Belmopan
Dangriga