如何在SQL Server中使用掩蔽正则表达式发送查询?
假设我有一个表如何在SQL Server中使用掩蔽正则表达式发送查询?,sql,sql-server,Sql,Sql Server,假设我有一个表Person。该表包含名称和年龄列。我需要一个查询,它将使用replace模式动态更改列 例如: select * from person [whatever] REPLACE(name, 'a', 'XXXXX') 我期望的结果是这样的: XXXXlex martinez 有办法吗?如果要将前四个字符更改为'X',请使用STUFF(): 如果要隐藏“名称”,请使用视图: create view v_person as select stuff(name, 1
Person
。该表包含名称和年龄列。我需要一个查询,它将使用replace模式动态更改列
例如:
select *
from person [whatever] REPLACE(name, 'a', 'XXXXX')
我期望的结果是这样的:
XXXXlex martinez
有办法吗?如果要将前四个字符更改为
'X'
,请使用STUFF()
:
如果要隐藏“名称”,请使用视图:
create view v_person as
select stuff(name, 1, 4, 'XXXX') as name, age
from person;
使用该视图的用户将只看到修改后的名称。选择替换(名称,'a','XXXXX'),年龄来自员工。我不能那样做。它们必须拆分。查询不必
从person
中选择*。它可以是``从person中选择name,age``您认为“使用替换模式动态更改列”是什么意思<代码>替换将一个字符串替换为另一个字符串。因此,REPLACE('A character string','A','XXXXX')
将返回'XXXXX chxxxxxrxxxxx character string'
。数据屏蔽会很糟糕。您想用x替换前4位。@Larnu是的,但模式不重要。我想知道有没有适合我的函数。我想把“name”列改为替换(name,'a','XXXXX')。但用户将发送类似于从员工中选择姓名并替换(姓名,'a','XXXXX')的查询。
这不是SQL的工作方式,@bilinmeyenkarakter。不能用其他表达式替换查询本身的一部分;如果要使用该表达式,需要在SQL语句中定义它。您不能传递name
并期望它被替换为REPLACE(name'a',XXXXX')
。Gordon的第二个建议,使用视图在这里似乎是一个很好的选择。而且,正如我上面所说,@bilinmeyenkarakter,替换(名称,'a','XXXXX')
是一个可怕的掩蔽过程。例如,对于Gordon的名字,他们的名字仍然是'Gordon Linoff'
,即使在应用了你的“掩蔽”之后。@Gordon,我相信你想要东西(名字,1,4,'XXXX')
STUFF
在这里只会用一个X
替换字符,而不是4个。@Larnu模式以便于查看。我在胡思乱想。那么,有没有一种方法可以让你喜欢上禁栏呢?当用户写入selectname from person
其意志被禁止或select name,年龄from person
时,此查询答案中的年龄仅为年龄?
create view v_person as
select stuff(name, 1, 4, 'XXXX') as name, age
from person;