IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB GO CREATE TABLE TB([ADDRESS] NVARCHAR(50)) INSERT TB SELECT N'南京路123弄456号7890室' INSERT TB SELECT N'南京路456弄789号1000室' IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_NUMBER GO CREATE FUNCTION DBO.GET_NUMBER(@S NVARCHAR(50)) RETURNS NVARCHAR(50) AS BEGIN WHILE PATINDEX('%[0-9]%',@S) > 0 BEGIN set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*') END RETURN @S END GO SELECT DBO.GET_NUMBER([ADDRESS])FROM TB /*-------------------------------------------------- 南京路***弄***号****室 南京路***弄***号****室(2 行受影响)*/
IF OBJECT_ID('DBO.f_replace') IS NOT NULL DROP FUNCTION DBO.f_replace GO create function f_replace (@s varchar(100)) returns varchar(100) as begin declare @i int,@j int while patindex('%[0-9]%',@s)>0 begin set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*') end return @s endselect dbo.f_replace(@s)10万条,需要分页
GO
CREATE TABLE TB([ADDRESS] NVARCHAR(50))
INSERT TB SELECT N'南京路123弄456号7890室'
INSERT TB SELECT N'南京路456弄789号1000室'
IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER
GO
CREATE FUNCTION DBO.GET_NUMBER(@S NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
WHILE PATINDEX('%[0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*')
END
RETURN @S
END
GO
SELECT DBO.GET_NUMBER([ADDRESS])FROM TB
/*--------------------------------------------------
南京路***弄***号****室
南京路***弄***号****室(2 行受影响)*/
select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(地址,'0','*'),'1','*'),'2','*'),'3','*'),'4','*'),'5','*'),'6','*'),'7','*'),'8','*'),'9','*')
写得长些,但效率肯定高.
DROP FUNCTION DBO.f_replace
GO
create function f_replace
(@s varchar(100))
returns varchar(100)
as
begin
declare @i int,@j int
while patindex('%[0-9]%',@s)>0
begin
set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*')
end
return @s
endselect dbo.f_replace(@s)10万条,需要分页
1,在程序里处理,对显示出来的数据中的数字进行隐藏处理。这点可以参照楼上的办法。
2,在SQL 里,用函数替换数字!