替换sqlite3中的字符串部分

python replace sqlite replicate

161 观看

2回复

62 作者的声誉

我想替换字符串中的零件信息。

例如从+1-2024561111+1-202***1111

我发现一个查询REPLICATE可以实现我想要的。但是,在sqlite3中似乎不可用。

REPLACEsqlite中只能替换某些特定的字符串。我需要在某些位置替换字符串。一个字母替换一个'*'; 更换后,它们需要具有相同的长度。

甚至Excel都可以使用轻松完成此操作REPLACE(old_text, start_num, num_chars, new_text)。有什么办法解决这个问题?顺便说一句,我在python中使用sqlite3。用python编写的解决方案也是可以接受的。

作者: WenT 的来源 发布者: 2016 年 1 月 25 日

回应 (2)


1

45963 作者的声誉

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))
作者: Hugh Bothwell 发布者: 25.01.2016 10:24

0

62 作者的声誉

决定

在sqlite中使用substr和replace

我最终使用substr(x,y,z)来获取第一个z字符y(我将1设置为从原始字符串的开头开始)。

然后使用||连接两个字符串。@Hugh Bothwell提供的答案有些不同。

之后||,我replace(substr(quote(zeroblob((Y + 1) / 2)), 3, Y), '0', '*')将字符串填充为length Y。一开始很难理解。该网站为您提供更多信息。

我需要在第5个字符之后屏蔽我的字符串,因此不需要在replace语句后附加任何内容。如果需要,只需添加另一个||并使用substr()

简而言之,我所做的是:(+1-2024561111原始字符串)

  • substr()➜ +1-202456
  • || ➜追加另一个字符串
  • replace声明➜填补串到一定长度➜+1-202456****


另一个解决方案:在python中

这是在sqlite3中使用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]
作者: WenT 发布者: 26.01.2016 03:27
32x32