我想替换字符串中的部件信息。
e.g。从
+1-2024561111
到+1-202***1111
我找到了一个可以实现我想要的查询REPLICATE
。但是,它似乎在sqlite3中不可用。
sqlite中的REPLACE
只能替换某些字符串。我需要的是替换某些位置中的字符串。一个字母替换一个'*';他们需要在更换后拥有相同的长度。
即使是Excel也可以使用REPLACE(old_text, start_num, num_chars, new_text)
轻松完成此操作。有什么方法可以解决这个问题吗?顺便说一句,我在python中使用sqlite3。用python编写的解决方案也是可以接受的。
答案 0 :(得分:1)
REPLACE(old_text, start_num, num_chars, new_text)
应与
相同SUBSTR(old_str, 1, start_num - 1) || new_text || SUBSTR(old_str, start_num + LENGTH(new_text))
答案 1 :(得分:0)
我最终使用substr(x,y,z)
从z
获取第一个y
字符(我将1设置为从原始字符串的开头开始)。
然后使用||
连接两个字符串。它与@Hugh Bothwell提供的答案略有不同。
在||
之后,我使用replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', '*')
将字符串填充到length Y
。一开始有点难以理解。This website为您提供更多信息。
我需要在第5个字符后屏蔽我的字符串,所以我不需要在replace
语句后面添加任何内容。如果您需要,只需添加其他||
并使用substr()
。
简而言之,我所做的是:
+1-2024561111
(原始字符串)
- substr()➜
+1-202456
||
➜添加另一个字符串replace
声明➜将字符串填充到特定长度➜+1-202456****
这是在sqlite3 in python中打印数据库的正常声明,如下所示:
for row in c.execute('SELECT * FROM stocks ORDER BY price'):
print row
我添加if-else
语句并使用ljust来完成我想要的操作。
下面是一个示例:
-- row[0]: the first filed in table, here means numbers
if len(row[0])>=9:
newNum=row[0][0:10].ljust(len(row[0]),'*')
#^^^^^^ to get first 9 chars in row[0]
# ljust fill in '*' from 10th char to the length of row[0]
print(newNum) # use newNum instead of row[0]