替换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]