代码之家  ›  专栏  ›  技术社区  ›  tango ward

Postgresql:删除连字符和空格

  •  5
  • tango ward  · 技术社区  · 8 年前

    我目前正在处理包含空格和连字符的DB数据。我在网上搜索发现了这个 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 回复  |  直到 8 年前
        1
  •  8
  •   Schwern    8 年前

    要高效地清除集合中的所有字符,请使用 translate 。需要一组字符才能转换为另一组字符。如果另一个集合为空,则会删除它们。

    test=> select translate('001-2012-145 6', '- ', '');
      translate  
    -------------
     00120121456
    

    虽然 翻译 对于这个特定的工作来说更简单、更快,了解如何为其他人使用regex是很重要的。使用 regexp_replace 您需要进行两项更改。

    首先,您必须匹配 设置 属于 - [- ]

    然后,必须指定替换所有引用,否则将在第一个引用之后停止。就这样结束了 g 旗帜

    test=> select regexp_replace('001-2012-145 6', '[- ]', '', 'g');
     regexp_replace 
    ----------------
     00120121456
    

    以下是关于 POSIX regular expressions and character sets

        2
  •  5
  •   Aman Aggarwal    8 年前

    内置的使用非常简单 翻译 作用

    示例:

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

    上述命令的输出: 00120121456