替换sqlite3中的部分字符串
Replace parts of string in sqlite3
我想替换字符串中的零件信息。
e.g. From +1-2024561111
To +1-202***1111
我找到了一个查询 REPLICATE
可以实现我想要的。但是,在sqlite3中似乎不可用。
而sqlite中的REPLACE
只能替换某些特定的字符串。我需要的是替换 某些位置 中的字符串。一个字母替换一个 '*' ;替换后它们需要具有相同的长度。
即使 Excel 也可以使用 REPLACE(old_text, start_num, num_chars, new_text)
轻松做到这一点。有什么办法可以解决这个问题吗?顺便说一句,我在 python 中使用 sqlite3。 python中写的解决方案也可以接受。
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))
在 sqlite 中使用 substr 和 replace
我最终使用 substr(x,y,z)
从 y
中获取第一个 z
个字符(我设置 1 以从原始字符串的开头开始)。
然后用||
连接两个字符串。这与@Hugh Bothwell 提供的答案有点不同。
在||
之后,我用replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', '*')
来填充字符串到length Y
。刚开始有点难懂。This website有更多的资料给你。
我需要在第 5 个字符后屏蔽我的字符串,因此我不需要在 replace
语句后面附加任何内容。如果需要,只需添加另一个 ||
并使用 substr()
.
In short, what I did is: +1-2024561111
(original string)
- substr() ➜
+1-202456
||
➜ to append another string
- the
replace
statement ➜ to fill string to a certain length ➜ +1-202456****
另一个解决方案:在python
在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]
我想替换字符串中的零件信息。
e.g. From
+1-2024561111
To+1-202***1111
我找到了一个查询 REPLICATE
可以实现我想要的。但是,在sqlite3中似乎不可用。
而sqlite中的REPLACE
只能替换某些特定的字符串。我需要的是替换 某些位置 中的字符串。一个字母替换一个 '*' ;替换后它们需要具有相同的长度。
即使 Excel 也可以使用 REPLACE(old_text, start_num, num_chars, new_text)
轻松做到这一点。有什么办法可以解决这个问题吗?顺便说一句,我在 python 中使用 sqlite3。 python中写的解决方案也可以接受。
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))
在 sqlite 中使用 substr 和 replace
我最终使用 substr(x,y,z)
从 y
中获取第一个 z
个字符(我设置 1 以从原始字符串的开头开始)。
然后用||
连接两个字符串。这与@Hugh Bothwell 提供的答案有点不同。
在||
之后,我用replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', '*')
来填充字符串到length Y
。刚开始有点难懂。This website有更多的资料给你。
我需要在第 5 个字符后屏蔽我的字符串,因此我不需要在 replace
语句后面附加任何内容。如果需要,只需添加另一个 ||
并使用 substr()
.
In short, what I did is:
+1-2024561111
(original string)
- substr() ➜
+1-202456
||
➜ to append another string- the
replace
statement ➜ to fill string to a certain length ➜+1-202456****
另一个解决方案:在python
在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]