CREATE FUNCTION [dbo].[getNF] (@str varchar(100)) RETURNS varchar(100) AS BEGIN while patindex('%[ ][0-9]%',@str)>0 set @str=stuff(@str,patindex('%[ ][0-9]%',@str),1,'=')while patindex('%[0-9][ ]%',@str)>0 set @str=stuff(@str,patindex('%[0-9][ ]%',@str)+1,1,';') return @str END INSERT INTO Box_M (DwgNo) SELECT dbo.getNF(DwgNo)FROM Box_M_Tmp 这样就可以了,你在说什么我没明白
谢谢了,我已经照你说的做了 我原先打算用replace解决的 再次感谢
#A P366705B000 A G02#A=P366705B000;A=G02怪我没说清楚 ,还有这种情况呢
#A P366705B000F A G02D#A=P366705B000F;A=G02D
换个函数,看看还有没有例外的 CREATE FUNCTION [dbo].[getNF] (@str varchar(100)) RETURNS varchar(100) AS BEGIN while patindex('%[ ][0-9,A-Z]%',@str)>0 begin set @str=stuff(@str,patindex('%[ ][0-9,A-Z]%',@str),1,'=') if patindex('%[0-9,A-Z][ ]%',@str)>0 set @str=stuff(@str,patindex('%[0-9,A-Z][ ]%',@str)+1,1,';') end return @str END
CREATE function GetPDef(@PDef varchar(500)) RETURNS VARCHAR(250) AS BEGINDECLARE @TF bit SET @TF=0 while patindex('%[ ]%',@str)>0 begin IF @TF=0 BEGIN set @str=stuff(@str,patindex('%[ ]%',@str),1,'=') SET @TF=1 END ELSE BEGIN set @str=stuff(@str,patindex('%[ ]%',@str),1,';') SET @TF=0 END endRETURN @PDef END
set @str = N'a: CA 0 CB 0 CE 0 CE1 13.8'while patindex('%[ ][0-9]%',@str)>0
set @str=stuff(@str,patindex('%[ ][0-9]%',@str),1,'=')while patindex('%[0-9][ ]%',@str)>0
set @str=stuff(@str,patindex('%[0-9][ ]%',@str)+1,1,';')select @str
-----------------------------------
replace(DwgNo,' ','=')
INSERT INTO Box_M (DwgNo)
SELECT replace(DwgNo,' ','')FROM Box_M_Tmp
因为该表共有几万条记录需要更改
REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )'string_expression2' 不能带通配符的吧 ^_^
谢谢!
看来要用11个REPLACE 才能解决问题了 哈哈
RETURNS varchar(100) AS
BEGIN
while patindex('%[ ][0-9]%',@str)>0
set @str=stuff(@str,patindex('%[ ][0-9]%',@str),1,'=')while patindex('%[0-9][ ]%',@str)>0
set @str=stuff(@str,patindex('%[0-9][ ]%',@str)+1,1,';')
return @str
END
INSERT INTO Box_M (DwgNo)
SELECT dbo.getNF(DwgNo)FROM Box_M_Tmp
这样就可以了,你在说什么我没明白
我原先打算用replace解决的
再次感谢
CREATE FUNCTION [dbo].[getNF] (@str varchar(100))
RETURNS varchar(100) AS
BEGIN
while patindex('%[ ][0-9,A-Z]%',@str)>0
begin
set @str=stuff(@str,patindex('%[ ][0-9,A-Z]%',@str),1,'=')
if patindex('%[0-9,A-Z][ ]%',@str)>0
set @str=stuff(@str,patindex('%[0-9,A-Z][ ]%',@str)+1,1,';')
end
return @str
END
RETURNS VARCHAR(250)
AS
BEGINDECLARE @TF bit
SET @TF=0
while patindex('%[ ]%',@str)>0
begin
IF @TF=0
BEGIN
set @str=stuff(@str,patindex('%[ ]%',@str),1,'=')
SET @TF=1
END
ELSE
BEGIN
set @str=stuff(@str,patindex('%[ ]%',@str),1,';')
SET @TF=0
END
endRETURN @PDef
END