我试图屏蔽某个字符串,以便只有最后4个字符可见,其余字符被屏蔽。
我在sql server中尝试了以下代码。
select REPLACE(trans_no,substring(trans_no,1,len(trans_no)-4),'*') from uvi_generalledgerwf where trans_no = '11043770'
实际结果-3770
然而,我的预期结果应该是***3770
此交易编号的长度可能不同,但右起的最后4位数字应始终可见。
我试图屏蔽某个字符串,以便只有最后4个字符可见,其余字符被屏蔽。
我在sql server中尝试了以下代码。
select REPLACE(trans_no,substring(trans_no,1,len(trans_no)-4),'*') from uvi_generalledgerwf where trans_no = '11043770'
实际结果-3770
然而,我的预期结果应该是***3770
此交易编号的长度可能不同,但右起的最后4位数字应始终可见。
3条答案
按热度按时间nzk0hqpo1#
我认为最简单的方法是:
关键是
replicate()
退货NULL
当值为负值时——所以没有问题。concat()
忽略NULL
值,以便正确处理短字符串。下面是一个db<>小提琴,展示了它如何处理不同的字符串长度。
jexiocij2#
下面是一个针对sql server的解决方案,但是它应该可以跨几乎所有数据库工作:
演示
这里的策略是简单地连接正确的
*
从静态字符串以及trans_no
. 支持trans_no
对于更高的长度,请使用一个更大的字符串文字,并具有足够的长度*
在里面。rekjcdws3#
当事务不是固定长度时,此解决方案有效。
你可以在这里测试https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=974fe247ef4a9ea2ded5e84abb74d0ff
然后在实际应用中,您可以按如下方式使用它: