Postgresql:删除连字符和空格

时间:2018-05-03 04:02:54

标签: postgresql

我目前正在处理包含空格和连字符的数据库数据。我在网上搜索了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。

2 个答案:

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

这是关于POSIX regular expressions and character sets的教程。

答案 1 :(得分:3)

使用内置翻译功能非常简单。

示例:

select translate('001-2012-145 6', '- ', '');

输出上述命令: 00120121456