我是stackoverflow和SQL的新手,所以我希望你理解!最近我遇到了很多SQL问题,我希望可以提供一些帮助来帮助我。这是因为我尝试过采购信息,有些确实回答了我的问题,但之后给了我更多的问题。 首先,我看到用户javascriptstress最近发布的一篇帖子,用于替换列中的值。在我的问题中,我正在研究SQL中的信用卡详细信息,我必须审查用户信用卡值的数字,这将显示 xxxxxxxxxxxx2345 的结果,而不是Visa卡的“2734948533562345”。但是,通过使用SUBSTRING和LEN,我无法隐藏值。由于并非所有信用卡都有16位数字,我遇到的问题是只提供信用卡号码的最后4位数字。如果我逐个编码每个信用卡号码肯定是可能的,但如果我必须隐藏许多信用卡的前12个号码怎么办?有没有更方便的解决方法?
非常感谢帮助!
聚苯乙烯。我对技术很陌生,对于造成的任何问题我很抱歉:(
答案 0 :(得分:1)
您可以根据字符串的长度动态确定剪切字符串的位置,然后使用REPLICATE
填充正确的数量。
DECLARE @cc VARCHAR(16) = '1234123412341234'
DECLARE @len INT
SELECT @len = LEN(@cc)
DECLARE @ss VARCHAR(4)
SELECT @ss = SUBSTRING(@cc, LEN(@cc)-3, 4)
SELECT REPLICATE('X', @len-4) + @ss
输出:
XXXXXXXXXXXX1234
这显然不是符合PCI标准的处理信用卡数据的方式。
您可以将这些语句链接在一起,以便在更大的SELECT语句中使用它们。您甚至可以定义一个scalar valued function,让您无需麻烦地调用它。
稍微更简洁的版本(没有我为了举例而放入的变量声明):
SELECT REPLICATE('X', LEN(@cc)-4) + SUBSTRING(@cc, LEN(@cc)-3, 4)
但我建议使用Gibbs先生版本,因为它使用RIGHT
功能来进一步简化它。
答案 1 :(得分:1)
如果您要查询:
SELECT REPLICATE('x', LEN(ccnumber) - 4) + RIGHT(ccnumber, 4))
FROM ...
REPLICATE
重复字符串 n 次。RIGHT
从字符串中获取 n 最右边的字符。对于SQL 2012以后,我建议使用更安全的CONCAT
来汇编字符串:
SELECT
CONCAT(
REPLICATE('x', LEN(ccnumber) - 4),
RIGHT(ccnumber, 4))
FROM ...
CONCAT
连接两个字符串; +
运算符也执行此操作,但CONCAT
永远不会将值视为数字并尝试添加它们。