替换sqlite3中的部分字符串

时间:2016-01-25 18:36:33

标签: python replace sqlite replicate

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

  

e.g。从+1-2024561111+1-202***1111

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

sqlite中的REPLACE只能替换某些字符串。我需要的是替换某些位置中的字符串。一个字母替换一个'*';他们需要在更换后拥有相同的长度。

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

2 个答案:

答案 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)

在sqlite中使用substr和replace

我最终使用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****
  •   


另一个解决方案:在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]