我目前正在处理包含空格和连字符的数据库数据。我在网上搜索了Remove/replace special characters in column values?。我试着按照答案但我仍然得到连字符。我试过玩它,我只能删除空白
conn_p = p.connect("dbname='p_test' user='postgres' password='postgres' host='localhost'")
conn_t = p.connect("dbname='t_mig1' user='postgres' password='postgres' host='localhost'")
cur_p = conn_p.cursor()
cur_t = conn_t.cursor()
cur_t.execute("SELECT CAST(REGEXP_REPLACE(studentnumber, ' ', '') as integer), firstname, middlename, lastname FROM sprofile")
rows = cur_t.fetchall()
for row in rows:
print "Inserting ", row[0], row[1], row[2], row[3]
cur_p.execute(""" INSERT INTO "a_recipient" (id, first_name, middle_name, last_name) VALUES ('%s', '%s', '%s', '%s') """ % (row[0], row[1], row[2], row[3]))
cur_p.commit()
cur_pl.close()
cur_t.close()
我想要达到的目标是,如果我的学生人数为001-2012-1456,则会显示为000120121456。
答案 0 :(得分:4)
要有效地消除集合中的所有字符,请使用translate
。它需要一组字符才能转换为另一组字符。如果另一个组为空,则删除它们。
test=> select translate('001-2012-145 6', '- ', '');
translate
-------------
00120121456
虽然translate
对于这项特定工作更简单,更快,但了解如何将regex用于其他工作非常重要。要使用regexp_replace
执行此操作,您需要进行两项更改。
首先,您必须将-
和的集与
[- ]
相匹配。
然后,您必须指定替换所有出现的内容,否则它将在第一次出现后停止。这是通过g
标志完成的。
test=> select regexp_replace('001-2012-145 6', '[- ]', '', 'g');
regexp_replace
----------------
00120121456
答案 1 :(得分:3)
使用内置翻译功能非常简单。
示例:强>
select translate('001-2012-145 6', '- ', '');
输出上述命令: 00120121456